O SENHOR Deus-Todo-Poderoso, dou graças ao SENHOR por me doar mais um dia para respirar "[...] respirar para viver" (Eclesiastes 3.19), porque todos os dias é meu primeiro dia, o dia do amanhã só pertence ao SENHOR! Provérbios 27:1 “Não presumas do dia de amanhã, porque não sabes o que ele trará.”. “Quem de vocês, por mais preocupado que esteja, pode acrescentar ao menos uma hora à sua vida.” (Mateus 6.27). O SENHOR, na força da graça com coração agradecido, sou eternamente grato ao SENHOR por me abençoar com uma família extraordinária em enormes circunstâncias me apoia durante esta extensa jornada de estudo (conhecimento).


Eclesiastes 10:10 "Se você deixa o machado perder o corte e não o afia, terá de trabalhar muito mais. É mais inteligente planejar antes de agir."

Lembre-se: quanto mais pesado for o machado, mais difícil o trabalho;
Use a cabeça: quanto mais cérebro, menos esforço.

Sempre afie seu machado. Não confunda velocidade com eficiência. Afiando minhas habilidades:)

[“Eclesiastes” é uma palavra grega que é traduzida normalmente por “Pregador” ou “o Sábio”, em outras traduções livre "aquele que está em busca"] - Eugene Peterson, 2007.

References

A grande busca, 2007


Video Games Sales Data Analysis¶

image.png

Source: Image

Análise de dados sobre vendas de mais de 16.500 jogos.

O mundo dos video games é uma paisagem enorme e muito variada! Existem videogames para quase todos os interesses, seja corrida, esportes, ficção científica, ação ou qualquer outra coisa. Dessa maneira, entender e ajudar a organizar os tipos de video games para os interessados em inventar, desenvolver ou analisar os jogos, existem vários tipos diferentes de video games e seus subgêneros. Com base nessa análise, usaremos um conjunto de dados de jogos referente a lista de video games com vendas superiores a 100.000 cópias, com objetivo de fornence insights valiosos no qual análise exploratória mostra o seu respectivo valor.

Da mesma forma, continue lendo este projeto para saber mais sobre as pesquisas referentes as vendas de video games e talvez você tenha entendimento como um projeto de Machine Learning se favorece da exploratória.


About Dataset¶

Este conjunto de dados contém uma lista de video games com vendas superiores a 100.000 cópias. Foi gerado por uma raspagem por meio do site que está disponpível em:

www.vgchartz.com

O script para raspar os dados está disponível em

Script

É baseado em BeautifulSoup usando Python.

Segundo script do código são 16.598 registros e 2 registros foram descartados devido a informações incompletas.

Data dictionary¶

Este projeto deve recebe como entrada os seguintes dados:

Variável Descrição
1 Rank Classificação das vendas globais
2 Name O nome dos jogos
3 Platform Plataforma de lançamento dos jogos (ou seja, PC, PS4, etc.)
4 Year Ano de lançamento do jogo
5 Genre Gênero do jogo
6 Publisher Editora do jogo
7 NA_Sales Vendas na América do Norte (em milhões)
8 EU_Sales Vendas na Europa (em milhões)
9 JP_Sales Vendas no Japão (em milhões)
10 Other_Sales Vendas no resto do mundo (em milhões)
11 Global_Sales Total de vendas mundiais.

Main goal¶

Propor o desenvolvimento de um fluxo de análise exploratória para o engajamento de vendas de videos games, em direção de métricas mensuravéis e ações agregadas para a tomada de decisões assertivas com destino ao grupo executivo nível C, mediante uso de técnicas Machine Learning (ML).

Specific objectives¶

Para atender o objetivo geral, foram elaborados os seguintes itens:

  • Apresentar conceitos, características e técnicas de estatística e matemática.
  • Apresentar os fundamentos da análise exploratória para ML
  • Realizar levantamento OKRs de engajamento de vendas de videos games.
  • Identificar extração, transformação e seleção de recursos
  • Aplicar o conhecimento de diferentes tipos de análise estatística e matemática para ML.
  • Implementar o fluxo de pipelines de análise exploratória para ML.

Contents¶

Part 1 Exploratory Analysis¶

1. The end-to-end pipeline of an Machine Learning project¶

  • 1.1. An overview of the end-to-end pipeline

2. Exploratory data analysis & Data preprocessing¶

  • 1.2. Load Data

  • 2.2. Data set overview

  • 2.2.1. Sidetable create simple summary tables with Pandas

  • 2.2.3. Quick way to check data for linearity

  • 2.2.3.1. Pipelines

  • 2.2.3.2. PCA applicability

3. Binary test¶

  • 3.1. Chi-square test (χ2)

  • 3.2. Aplicabilidade do teste χ2

4. Continuous tests¶

  • 4.1 Correlation

  • 4.1.2. Correlation does not imply causation

  • 4.2. Statistical tests

  • 4.2.1. Applicability normality Test (Shapiro-Wilks Test)

  • 4.2.2. Skewness

Part 2 Objectives and Key Results – OKRs¶

5. Regression Analysis¶

5.1. Linear Model¶

  • 5.1.2. 1st degree function

6. Z-Score¶

7. Pareto Principle (“80/20 or 20/80 rule”)¶

8. Gamma Distribution¶

9. Temporal analysis¶

  • 9.1. Confidence Interval (CI) for Arithmetic Mean for Video Game Sales Over Time

  • 9.2. Seasonality Patterns

  • 9.3 Evolution of the top 5 most requested games by Genre

  • 9.4. Global sales by genres and platform

10. Conclusion¶

11. Apêndice¶


Importing Necessary Modules and Functions¶

Este projeto usa várias bibliotecas. Isso pode ser bom ou ruim. Algumas dessas bibliotecas podem ser difíceis de instalar ou podem entrar em conflito com versões de outras bibliotecas.

Existem duas opções principais para instalar bibliotecas em Python. Uma delas é usa pip (um acrônimo para Pip Installs Python, ou Pip installs Python), uma ferramenta que vem com o Python e a outra opção é usar o Anaconda (https://anaconda.org).

Inicializaremos o projeto com todas as bibliotecas necessárias para atingir objetivos desejados.

Este projeto requer Python 3.7 ou superior:

In [1]:
# Importing libraries needed for Operating System Manipulation in Python
import os, sys
from platform import python_version

assert sys.version_info >= (3, 7)
In [2]:
# Importing library for manipulation and exploration of datasets.
import numpy as np
import pandas as pd
import sidetable
from ydata_profiling import ProfileReport

# Importing functions auxiliary
from functions import functions_aux

# Importing classes and libraries needed for the data pre-processing step.
from sklearn import preprocessing
from sklearn.preprocessing import (
    MinMaxScaler, StandardScaler,Normalizer,
    LabelEncoder, OneHotEncoder,
)

# Import functions for custom transformations
from custom_transformers import transformer

# Importing pipelines
from sklearn.pipeline import  Pipeline
from sklearn.compose import (
    ColumnTransformer,
)
# Importing functions to calculate some statistics.
from statistical_calculations import stats_calc

# Important library for statistical tests
import researchpy as rp # testes estatísticos

# Importing library for extracting the files
from pyunpack import Archive

# Importing auxiliary graphics
from graphics import graphic 

# Importing necessary libraries for plotting interactive graphs with plotly.
import plotly.express as px

# For Graph Rendering using matplotlib 
%matplotlib inline

# Altair is a declarative statistical visualization library for Python
import altair as alt

# Importing libraries needed for plotting interactive graphs with plotly.
import plotly.express as px

# Importing library for racing bar chart
from raceplotly.plots import barplot

# For Graph Rendering using matplotlib 
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib as m

# Formatting the graphics output
plt.style.use('fivethirtyeight')
plt.rc('font', size=14)
plt.rc('axes', labelsize=14, titlesize=14)
plt.rc('legend',fontsize=14)
plt.rc('xtick', labelsize=12)
plt.rc('ytick', labelsize=12)
m.rcParams['text.color'] = 'k'

# Configuring how many rows and columns will be shown in the notebook
from IPython.display import display, Image
#pd.options.display.max_rows =None
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)

# To hide Future Warnings
import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning) 
warnings.simplefilter(action = 'ignore', category = FutureWarning)
warnings.filterwarnings("ignore", category=UserWarning)

System and Libraries Report¶

A função a seguir certificar as informações de hardware, sistema e versões da bibliotecas usadas neste projeto

In [3]:
# This module is used to record versions of other modules used in this jupyter.
print("=" *40)
%reload_ext watermark
%watermark -a "Helber" --iversions

# Python Language Version
print('Python Language Version Used In This Jupyter Notebook:', python_version())
functions_aux.info_system()
========================================
Author: Helber

researchpy: 0.3.2
sklearn   : 0.0.post1
altair    : 4.2.0
matplotlib: 3.6.3
numpy     : 1.22.4
sys       : 3.9.7 (default, Sep 16 2021, 13:09:58) 
[GCC 7.5.0]
plotly    : 5.6.0
sidetable : 0.9.1
pandas    : 1.5.3

Python Language Version Used In This Jupyter Notebook: 3.9.7
======================================== System Information ========================================
System: Linux
Release: 5.15.0-79-generic
Version: #86~20.04.2-Ubuntu SMP Mon Jul 17 23:27:17 UTC 2023
Machine: x86_64
======================================== CPU Info ========================================
Physical cores: 6
Total cores: 12
Max Frequency: 4800.00Mhz
Min Frequency: 800.00Mhz
======================================== Memory Information ========================================
Total: 31.18GB

1. The end-to-end pipeline of an Machine Learning project¶

1.1. An overview of the end-to-end pipeline¶

Um pipeline de Machine Learning (ML) é uma sequência de etapas para conduzir um projeto de ML. Essas etapas seguem:

  • Definicão do problema e coleta de dados: Define objetivo do problema em termo de negócios como um problema de ML e colete os dados de que você precisa.

  • Pré-processamento de dados e engenharia de recursos: Processar os dados em um formato adequado que pode ser inserido nos algoritmos de ML. Assim como,selecionar ou gerar recursos relacionados para a saída de destino para melhorar o desempenho dos algoritmos.Além disso, essa etapa geralmente é realizada explorando primeiro o conjunto de dados para ter uma noção de suas características. As operações devem acomodar os algoritmos de ML específicos que você está considerando.

  • Seleção de algoritmo de ML: Selecione algoritmos de ML apropriados para a tarefa que você gostaria de testar, com base em seu conhecimento prévio do problema e em sua experiência.

  • Treinamento e avaliação do modelo: Aplique o algoritmo (ou algoritmos) de ML selecionado para treinar um modelo de ML com seus dados de treinamento e avaliar seu desempenho em o conjunto de dados de validação.

  • Ajuste de hiperparâmetros: Tente alcançar um melhor desempenho iterativamente ajustando os hiperparâmetros do modelo.

  • Implantação de serviços e monitoramento de modelos: Implante a solução final de ML e monitore seu desempenho para que você possa manter e melhorar o pipeline continuamente.

Dessa forma, como resultado você pode ver, um projeto de ML é um processo humano em loop. Bem como, iniciando com definnição do problema e coleta de dados, assim o pipeline envolve várias etapas de processamento de dados, que normalmente acontecem de forma assíncrona conforme a figura a seguir.

image.png

Source: (QINGQUAN.S; HAIFENG.J; X.HU, 2022)

A primeira coisa que você precisa fazer em qualquer projeto de ML é define o problema e coletar os dados correspondentes.Assim, a definição do problema exige que você especifique as entradas e saídas do modelo de ML. No problema de vendas de video games, as entradas são conjunto de características que descrevem os jogos. Recomendo o livro Automated Machine Learning in Action para saber mais sobre todos esses fluxos dos pipelines.

2. Exploratory data analysis & Data preprocessing¶

Em primeira análise, o próximo passo é fazer algum pré-processamento para transformar os dados em um formato adequado para alimentar os algoritmos de ML. O procedimento geralmente envolve a etapa de análise exploratória de dados (EDA) com base em suposições anteriores ou perguntas sobre os dados. Dessa forma, a EDA pode nos ajude a nos familiarizar com o dataset e obter mais informações sobre ele, para permitir uma melhor preparação de dados. Assim como, algumas perguntas frenquente incluem as seguintes:

  • Quais são os tipos de dados dos valores em cada recurso? São strings ou outras objetos que podem ser usados em etapas posteriores no pipeline ou precisam ser Transformado?

  • Quantos valores distintos cada variável possui? São valores numéricos, valores categóricos, ou outra coisa?

  • Quais são as escalas e estatísticas básicas de cada variável? Podemos ganhar algum insights visualizando a distribuição dos valores ou correlações entre eles?

  • Há valores ausentes nos dados? Em caso afirmativo, temos que removê-los ou preencher com alguma abordagem de imputação?

Diante disso, na prática dados de diferentes formatos geralmente requerem técnicas de pré-processamento de dados personalizados conforme o seu formato e características, de acordo com os problemas que nos interessam que estamos trabalhando para modelos de ML e assim por diante. Este é geralmente um processo empírico heurístico, resultando na proposta de várias operações ad hoc. Na seção a seguir mostra o processo da análise exploratória e pré-processamento de dados.Mas antes disso, precisamos carregar o conjunto de dados ou dataset.

2.1. Load Data¶

In [4]:
%%time

# Descompactar o arquivo compactado 
Archive('dataset/vgsales.csv.zip').extractall('dataset/')

# Loading the dataset with pandas
df = pd.read_csv('dataset/vgsales.csv')
CPU times: user 17.4 ms, sys: 7.54 ms, total: 25 ms
Wall time: 24.6 ms

2.1. Data set overview¶

Iniciaremos o desenvolvimento com uma visualização mais sofisticada para obter uma visão completa do dataset, por meio da biblioteca pandas-profiling, esta biblioteca contém um relatório de perfil. Dessa forma, esse relatório sintetizará os tipos das colunas e permitirá que você visualize os detalhes das estatísticas dos quantis, as estatísticas descritivas, histogramax, valores comuns e valores extremos (outliers).

Portanto, com base nas quatro perguntas mencionadas na seção anterior, realizaremos um pré-processamento preliminar nos dados dessas perguntas, assim:

  • Qual são os tipos de dados em cada recurso?

  • Quantos valores distintos cada recurso tem no dataset?

  • Quais são a escala e as estatísticas básicas de cada recurso?

  • Há valores ausentes e duplicados contidos nos dados?

Este relatório mostrará muitas informações importantes do dataset e, à medida que o projeto se desenvolve, seguiremos grande parte do relatório como um guia para cada etapa do projeto, sempre referindo-se o possível à sua seção de análise. Portanto, o código a seguir mostra os estágios iniciais do projeto.

In [7]:
# Create um relatório de perfil 
vgs = ProfileReport(df, title="Video Games Sales report")

# Chamada do objeto da função
vgs.to_notebook_iframe()

# Exportando o relatório externo via html
#vgs.to_file("report/video-game-sales.html")
Summarize dataset:   0%|          | 0/5 [00:00<?, ?it/s]
Generate report structure:   0%|          | 0/1 [00:00<?, ?it/s]
Render HTML:   0%|          | 0/1 [00:00<?, ?it/s]

Em primeira análise, temos 11 variables sendo 7 numeric e 4 categorical, assim sendo, dataset não apresentou dados duplicados, mas apresentou dados ausentes. Por fim, temos 16.598 registros no dataset, relativamente um boa quantidades de dados. Mas, antes disso, vamos verificar com mais detalhe quais são os tipos de dados de cada variable de forma resumida.

In [8]:
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 16598 entries, 0 to 16597
Data columns (total 11 columns):
 #   Column        Non-Null Count  Dtype  
---  ------        --------------  -----  
 0   Rank          16598 non-null  int64  
 1   Name          16598 non-null  object 
 2   Platform      16598 non-null  object 
 3   Year          16327 non-null  float64
 4   Genre         16598 non-null  object 
 5   Publisher     16540 non-null  object 
 6   NA_Sales      16598 non-null  float64
 7   EU_Sales      16598 non-null  float64
 8   JP_Sales      16598 non-null  float64
 9   Other_Sales   16598 non-null  float64
 10  Global_Sales  16598 non-null  float64
dtypes: float64(6), int64(1), object(4)
memory usage: 1.4+ MB

Em segunda análise, estamos preocupados é com número de valores distintos nos recursos, contar os valores distintos pode ser útil para distinguir os tipos de recursos para que possamos projetar estratégias personalizadas para processá-los. Do mesmo modo, isso também pode nos ajudar a remover quaisquer recursos redundantes. Por exemplo, se todas as amostras de dados tiverem o mesmo valor para um recurso, esse recurso não pode fornecer nenhuma informação útil para algum tipo certo de previsão em um modelo ML. Nesse sentido, é possível que cada ponto de dados tenha um valor exclusivo para um recurso, mas estamos confiantes de que esses valores não serão úteis para a inferência ou previsão .Este é frequentemente o caso do recurso ID dos pontos de dados, isso é apenas a ordem das amostras de dados. Na tabela a seguir, podemos ver que neste dataset, não há nenhum recurso cujo valor seja idêntico para todos os pontos, e não há recursos em que cada ponto de dados tenha não valores exclusivo. Embora alguns deles tenham um grande número de valores distintos, como "Name: 11.493", "Rank: 16598" e "Global_sales: 623" e assim por diante, porque essas são variables numéricas, bem como, as características dos valores são úteis para comparar totais de vendas de video games, não devemos não removê-los. Um ponto crítico são recursos Name e Publisher, no qual tipo dado é categorial.

2.1.1. Sidetable create simple summary tables with Pandas¶

Sidetable é uma nova biblioteca do Python que adiciona muitos DataFrames ao pandas que sãp úteis. Realmente é bom avaliar e apresentar detalhes sobre os resultados exploratórios de forma simples e efieciente para descobrir insight valiosos no dataset. Mas lembre-se de que nosso cérebro é um sistema de reconhecimento de padrões fantásticos, e nosso sistema visual faz um pré-processamento complexo, antes que qualquer informação pareça a nossa percepção; logo, o fato que as coisas aparentemente parecem serem simples, não significa que de fato pode ser.

À medida que exploramos a sidetable, usaremos no conjunto dados de vendas de video games adicionado à biblioteca.

Mediante o exposto, podemos usar a função counts() da biblioteca sidetable para mostra quantos valores únicos existem em cada variable, bem como os valores mais e menos frequentes e suas contagens totais. Esta exibição resumida pode ajudá-lo a determinar se você precisa converter dados em um valor categórico, também pode ajudá-lo a entender a estrutura de alto nível de seus dados. Em outras palavras, unique e value_counts são úteis para manipular e explorar variables categóricas e muitas vezes, variables categóricas, haverá classes que precisam ser tratadas na fase de manipulação de dados.

In [9]:
df.stb.counts()
Out[9]:
count unique most_freq most_freq_count least_freq least_freq_count
Genre 16598 12 Action 3316 Puzzle 582
Platform 16598 31 DS 2163 GG 1
Year 16327 39 2009.0 1431 2020.0 1
Other_Sales 16598 157 0.0 6477 1.68 1
JP_Sales 16598 244 0.0 10455 1.97 1
EU_Sales 16598 305 0.0 5730 3.52 1
NA_Sales 16598 409 0.0 4499 2.39 1
Publisher 16540 578 Electronic Arts 1351 Headup Games 1
Global_Sales 16598 623 0.02 1071 2.33 1
Name 16598 11493 Need for Speed: Most Wanted 12 Mega Minis Volume 3 1
Rank 16598 16598 1 1 1 1

Dessa maneira, podemos verificar se uma variável categórica é única dentro de cada um de seus intervalos de categoria. Por padrão, todos os tipos de dados são incluídos, mas você pode usar os parâmetros exclude e include para selecionar tipos específicos de colunas. A sintaxe é a mesma do pandas select_dtypes, por exemplo:

In [10]:
df.stb.counts(exclude='number')
Out[10]:
count unique most_freq most_freq_count least_freq least_freq_count
Genre 16598 12 Action 3316 Puzzle 582
Platform 16598 31 DS 2163 GG 1
Publisher 16540 578 Electronic Arts 1351 Headup Games 1
Name 16598 11493 Need for Speed: Most Wanted 12 Mega Minis Volume 3 1

Como regra geral, é importante analisar se o número de categorias for inferior a 10, a codificação one-hot é usualmente a melhor opção (mas seu rendimento pode variar!). Se o número de categorias for maior que 50, os embeddings (Um embedding é um vetor denso treinável que representa uma categoria) são preferíveis entre 10 e 50 categorias, você pode tentar usar as duas opções e ver qual delas funciona melhor para o seu caso de uso. De acordo (GÉRON, 2021) ressaltar que, conforme o número de variáveis categóricas aumenta caímos no problema ( em tenta combater a “maldição da dimensionalidade”) em ML envolvem milhares ou até milhões de características para cada instância de treinamento. Todas essas características não somente tornam o treinamento extremamente lento, como também dificultam e muito encontrar uma boa solução, conforme veremos aos tópicos subsequentes do projeto. Esse problema costuma ser chamado de a maldição da dimensionalidade como citado anteriormente.

É importante lembra OneHotEncoder não pode lidar com valores ausentes, portanto, é importante se livrar deles antes da codificação.

Ainda mais, continuamos o desenvolvimento do projeto na manipulação de dados ausentes, é uma análise muito importante de se fazer. Podemos verificar quantidade de valores ausentes ou NAN existentes dentro do dataset. Do mesmo modo, como uma regra prática sugeridas com base em alguns pesquisa refernte ao assunto, em geral, o idel é remover acima de 30% dos valores de dados ausentes, ou seja, é mais seguro aplicar esse método. O principal motivo é, se for fazer inferência acima de 50% dos valores ausentes recorrendo as diversas técnicas avançadas gastaria muito tempo tendando preencher os valores ausentes, a chance de erro é muito alta

  • Portanto, uma margem de corte de segurança é de 30% e uma margem de tentativa é de 50%, acima disso o ideal é exlcuir a variável.

A função missing inclui uma tabela de resumo que mostra os valores ausentes em seus dados por contagem e porcentagem do total de valores ausentes em uma variable. O código a seguir mostra essa tabela.

In [11]:
# Verificando se há valores missing dataset
df.stb.missing(clip_0=True, style=True)
#df.stb.missing(style=True)
Out[11]:
  missing total percent
Year 271 16,598 1.63%
Publisher 58 16,598 0.35%

Vamos plotar um gráfico de barras e analisá-lo de outro ângulo mais específico, agrupado por ano

In [12]:
# Call of auxiliar-y graphics functions
functions_aux.check_missing_values(df)
graphic.plot_missing_values(df,'gridon')

# Resumo dos valores ausentes
agg_func_custom_count = {
    'Publisher': ['count', 'nunique', 'size', functions_aux.unique_nan, functions_aux.count_nulls, set]
}
nan=df.groupby(['Year']).agg(agg_func_custom_count).reset_index()
nan
======================================== NAN values count ========================================
Year         271
Publisher     58
dtype: int64
======================================== Total NAN values ========================================

Total:  329

Total in terms of percentages: 1.98 %
Out[12]:
Year Publisher
count nunique size unique_nan count_nulls set
0 1980.0 9 2 9 2 0 {Atari, Activision}
1 1981.0 46 14 46 14 0 {Parker Bros., Atari, Men-A-Vision, Tigervisio...
2 1982.0 36 18 36 18 0 {Wizard Video Games, Parker Bros., CBS Electro...
3 1983.0 17 4 17 4 0 {Parker Bros., Activision, Atari, Nintendo}
4 1984.0 14 4 14 4 0 {Activision, Namco Bandai Games, Hudson Soft, ...
5 1985.0 14 6 14 6 0 {Hudson Soft, Nintendo, Capcom, Activision, Na...
6 1986.0 21 6 21 6 0 {Atari, Hudson Soft, Nintendo, Capcom, Konami ...
7 1987.0 16 8 16 8 0 {Atari, SquareSoft, Nintendo, Capcom, Activisi...
8 1988.0 15 7 15 7 0 {SquareSoft, Nintendo, Capcom, Maxis, Activisi...
9 1989.0 17 9 17 9 0 {Atari, SquareSoft, Nintendo, Capcom, Activisi...
10 1990.0 16 7 16 7 0 {SquareSoft, Nintendo, Capcom, Sega, Konami Di...
11 1991.0 41 17 41 17 0 {Angel Studios, SquareSoft, Nintendo, Capcom, ...
12 1992.0 43 21 43 21 0 {Hudson Soft, Arena Entertainment, Sega, Elect...
13 1993.0 60 27 60 27 0 {Hudson Soft, Imax, Misawa, Sega, Sammy Corpor...
14 1994.0 121 45 121 45 0 {Red Orb, Hasbro Interactive, Hudson Soft, Ang...
15 1995.0 219 67 219 67 0 {Angel Studios, Hudson Soft, U.S. Gold, Time W...
16 1996.0 263 81 263 81 0 {Midway Games, Elf, Kadokawa Shoten, Compile, ...
17 1997.0 289 74 289 74 0 {Red Orb, Midway Games, Hasbro Interactive, Hu...
18 1998.0 379 92 379 92 0 {Midway Games, Hasbro Interactive, Swing! Ente...
19 1999.0 338 80 338 80 0 {Midway Games, Hasbro Interactive, Kadokawa Sh...
20 2000.0 349 61 349 61 0 {Midway Games, Atari, Hasbro Interactive, Huds...
21 2001.0 482 83 482 83 0 {Majesco Entertainment, Midway Games, Rage Sof...
22 2002.0 829 99 829 99 0 {Majesco Entertainment, Midway Games, Rage Sof...
23 2003.0 775 81 775 81 0 {Majesco Entertainment, Midway Games, Sammy Co...
24 2004.0 744 79 763 80 19 {nan, Majesco Entertainment, Midway Games, Sam...
25 2005.0 936 83 941 84 5 {nan, Majesco Entertainment, Midway Games, Nov...
26 2006.0 1008 112 1008 112 0 {Majesco Entertainment, Midway Games, Hasbro I...
27 2007.0 1201 141 1202 142 1 {nan, Majesco Entertainment, Midway Games, Phe...
28 2008.0 1428 165 1428 165 0 {Phenomedia, Majesco Entertainment, Midway Gam...
29 2009.0 1431 160 1431 160 0 {Phenomedia, Majesco Entertainment, Idea Facto...
30 2010.0 1257 142 1259 143 2 {nan, Majesco Entertainment, Virtual Play Game...
31 2011.0 1136 120 1139 121 3 {nan, Majesco Entertainment, GameMill Entertai...
32 2012.0 655 99 657 100 2 {nan, GameMill Entertainment, Idea Factory, Ka...
33 2013.0 546 76 546 76 0 {City Interactive, Majesco Entertainment, Avan...
34 2014.0 580 69 582 70 2 {nan, City Interactive, Compile Heart, Idea Fa...
35 2015.0 614 91 614 91 0 {Idea Factory, Marvelous Games, Revolution Sof...
36 2016.0 342 68 344 69 2 {nan, Atari, Compile Heart, Idea Factory, Happ...
37 2017.0 3 2 3 2 0 {Sega, Idea Factory}
38 2020.0 1 1 1 1 0 {Ubisoft}

Dessa forma, as variables year e publisher são as variables que correponde juntas cerca de 329 registros de valores NAN representado no dataset. Com base nesta análise perceba-se que, os valores nan cresceram mais rapidamente durante período do year 1996 a 2016, onde representa percentile 5th cuja year 1996 até percentile 95th onde year 2015.

Com efeito dessa análise, podemos examinar isso como mais uma regra prática, tal como, se dataset tem mais de 5% de valores missing, o ideal é usa técnicas de imputação. Dessa maneira, essas variables representa um percentual de 1.982% que é um valor extremanente baixo, bem como, não necessitamos usar técnicas de regras práticas pois não se enquadra dentro do limites das regras mencionadas anteriormente.

A maioria dos algoritmos ML não pode funcionar com valores NAN. Existe diversas formas de tratar valores NAN, como facilmente podemos utiliza os métodos já disponível como: drop() e fillna() do DataFrame, bem como, cada método desse tem sua característica específica de validação do tratamento.

A remoção é uma boa opção se o conjunto de dados for suficientemente grande a ponto de que a eliminação de alguns registros não afetar as conclusões. Outra boa razão para o uso da remoção seria se os valores discrepantes fossem tão extremos que distorcessem os resultados a ponto de serem geradas conclusões totalmente inapropriadas.


In [13]:
# Remove of rows with values missing
df_dropna =df.dropna(axis=0)

# Analyzing if there are missing values in the dataset
df_dropna.stb.missing(style=True)
Out[13]:
  missing total percent
Rank 0 16,291 0.00%
Name 0 16,291 0.00%
Platform 0 16,291 0.00%
Year 0 16,291 0.00%
Genre 0 16,291 0.00%
Publisher 0 16,291 0.00%
NA_Sales 0 16,291 0.00%
EU_Sales 0 16,291 0.00%
JP_Sales 0 16,291 0.00%
Other_Sales 0 16,291 0.00%
Global_Sales 0 16,291 0.00%
In [14]:
# Function calls to calculate the differences
functions_aux.summary_quick_in_between_datasets(df,df_dropna)
First dataset, get the number of rows and columns: (16598, 11)
Get the number of elements: 182578 

First dataset, get the number of rows and columns: (16291, 11)
Get the number of elements: 179201
----------------------------------------------------------------------
Difference between datasets in rows: 307 and columns: 0
In [15]:
# convert column names to lowercase
df_dropna.columns = df_dropna.columns.str.lower()

# convert variable year to type int
df_dropna=transformer.cols_to_int(df_dropna,['year'])

# Checking for duplicate records.
print(f'Values duplicated: {df_dropna.duplicated().sum()}')
Values duplicated: 0

2.3. Quick way to check data for linearity¶

Segundo (AURÉLIN.G, 2021) refina que estamos tão acostumados a viver em três dimensões que nossa intuição nos falha quando tentamos imaginar um espaço de alta dimensão. Mesmo um 4D básico hipercubo é incrivelmente difícil de imaginar em nossas mentes (veja a figura a seguir), muito menos um elipsóide de 200 dimensões dobrado em um espaço de 1.000 dimensões.

Point, segment, square, cube, and tesseract (0D to 4D hypercubes)

image.png

Source: (AURÉLIN.G, 2021)

Conforme a figura ilustra, mostra que o quão é complexo analisar dados em alta dimensão, por essa razão, os algoritmos de redução de dimensonalidade entra cena para este tipos cenários ao qual eles são mais adequados. No entanto, as variables (name e publisher) são variables de alta dimensão, por este motivo não aplicaremos redução dimensionalalidade nelas. Além disso, tem ténicas mais apropriadas para este cenário.

Além do mais, é importante analisar quando estamos manipulando dados novos, a primeira pergunta que vem à mente é sobre a distribuição dos dados. A distribuição pode ser linear ou não linear. Podemos usar Principal Component Analysis (PCA) ou um Autoencoder para redução da dimensão dos recursos, ou seja, compactar os recursos. Mas, como sabemos, o PCA não funciona bem para dados não lineares. Por outro lado, os autoencoders podem modelar dados não lineares. Portanto, antes da compactação dos dados, é essencial saber se os dados são lineares ou não.

Nesse sentido (Aditya.D, 2022) defende alguns termos-chave para identificar se dados são lineares ou não lineares, que são definidos assim:

  • Para dados lineares, os primeiros autovalores serão significativamente grandes. O restante dos valores será quase zero.

  • Para dados não lineares, muitos componentes principais terão autovalores diferentes de zero. O autovetor dá a direção da dispersão máxima dos dados. Assim como, se os dados não forem lineares e não estiverem espalhados em uma única direção, todos os autovetores terão autovalores diferentes de zero. É porque não há uma direção geral na qual os dados são espalhados.

PCA é de longe o algoritmo de redução de dimensionalidade mais popular

Com base no exposto, ajustaremos os dados, ou seja, faremos algumas transformações necessárias para esta tarefa usando um método automatizado, onde o pipeline é recomendado para este cenário.

2.3.1. Pipelines¶

In [16]:
# Creating a pipeline to pre-process numerical attributes:
num_pipeline = Pipeline([
    ('norm',Normalizer()),
])

# Creating a pipeline for One Hot Encoding Transformation
cat_pipeline = Pipeline([
    ('ohe',OneHotEncoder(handle_unknown='ignore',sparse=False)), # Defina o handle_unknown='ignore' do OneHotEncoder para evitar avisos
])

# Create an object of Class Custom Label Encoder
lb = transformer.CustomLabelEncoder()

# Creating pipeline for Label Encoder Transformation
lb_pipeline = Pipeline([
    ('lb', lb),
    ('lb_norm', Normalizer())
])
In [17]:
# Select numeric attributes
num_attribs = df_dropna.select_dtypes(include=[np.number]).columns.tolist()

# Select attributes categorical
cat_attribs = ['genre','platform']
#cat_attribs = df_dropna.select_dtypes(include=[np.object_]).columns.tolist()

# Create a complete data pre-processing pipeline using ColumnTransformer and transformer pipelines. So let's put the numerical and categorical pipelines together:
preprocess_pipeline = ColumnTransformer([
        ("num_pipe",num_pipeline,num_attribs),
        #("cat_pipe",cat_pipeline,cat_attribs),
        ("cat_pipe",lb_pipeline,cat_attribs)
],

    # Setting remainder='passthrough' will mean that all unspecified columns in the list of “ transformers ” will be passed through without transformation, instead of being discarded
    #remainder='passthrough',
)
# View
preprocess_pipeline
Out[17]:
ColumnTransformer(transformers=[('num_pipe',
                                 Pipeline(steps=[('norm', Normalizer())]),
                                 ['rank', 'year', 'na_sales', 'eu_sales',
                                  'jp_sales', 'other_sales', 'global_sales']),
                                ('cat_pipe',
                                 Pipeline(steps=[('lb', CustomLabelEncoder()),
                                                 ('lb_norm', Normalizer())]),
                                 ['genre', 'platform'])])
In [18]:
# Ajuste os dados, ou seja, transforme
df_prepared = preprocess_pipeline.fit_transform(df_dropna)

# Chamada da função, extraíndo nomes das columns
cols=transformer.get_column_names_from_ColumnTransformer(preprocess_pipeline)

# Creating new dataframe to check due transformations if they were successfully transformed
df_fit = pd.DataFrame(df_prepared, columns=cols)

0.Transformer/Pipeline: num_pipe Pipeline

	n_orig_feature_names:7
	n_new_features:7
	new_features: ['rank', 'year', 'na_sales', 'eu_sales', 'jp_sales', 'other_sales', 'global_sales']



1.Transformer/Pipeline: cat_pipe Pipeline

	n_orig_feature_names:2
	n_new_features:2
	new_features: ['genre', 'platform']



2.Transformer/Pipeline: remainder str

	n_orig_feature_names:2
In [19]:
# View transformed dataframe
df_fit.head()
Out[19]:
rank year na_sales eu_sales jp_sales other_sales global_sales genre platform
0 0.000498 0.998822 0.020659 0.014450 0.001877 0.004212 0.041198 0.358979 0.933346
1 0.001007 0.999679 0.014645 0.001803 0.003430 0.000388 0.020266 0.341743 0.939793
2 0.001494 0.999785 0.007892 0.006413 0.001887 0.001648 0.017835 0.224860 0.974391
3 0.001991 0.999815 0.007838 0.005479 0.001632 0.001473 0.016423 0.358979 0.933346
4 0.002505 0.999834 0.005645 0.004453 0.005119 0.000501 0.015714 0.813733 0.581238
In [20]:
# Function calls to calculate the differences
functions_aux.summary_quick_in_between_datasets(df_dropna,df_fit)
First dataset, get the number of rows and columns: (16291, 11)
Get the number of elements: 179201 

First dataset, get the number of rows and columns: (16291, 9)
Get the number of elements: 146619
----------------------------------------------------------------------
Difference between datasets in rows: 0 and columns: 2

2.3.2. PCA applicability¶

In [21]:
# Calculate PCA
pca, eigen, comp, var = transformer.computePCA(df_fit)
print(f'Autovalores: {eigen.tolist()}')
print(f'\nNumber of components: {comp}')
print(f'\nTotal Explained Variance: {var}')

# Plot 
graphic.plot_pca(df_fit,df_fit.columns.tolist(),'xgridoff')

# Plot gráfico na terceira dimensão
graphic.plot_3D_pca(df_fit,df_fit.columns.tolist(),'xgridoff')
Autovalores: [0.10397, 0.09564, 0.0075, 0.0035, 0.0, 0.0, 0.0, 0.0, 0.0]

Number of components: 9

Total Explained Variance: 100.00000000000003

Portanto, observe-se os autovalores em cada caso:

  • Para dados lineares, o primeiro autovalor é 0.10 e os valores restantes estão próximos de zero ou zero.

Dessa análise pode-se extrair uma informação vantajosa é da taxa de variância explicada de cada componente prinicipal. A taxa indica a proporção da variância do conjunto de dados que situa ao longo de cada componente princical.

Essa saída do gráfico informa que arredondando 94.78 para 95% da variância explicada no dataset está dois primeiros componentes. Assim como, o primeiro componente (PC) explica entorno 49% da variância explicada, no qual é composto pelas variables genre e platform, e cerca de 45% da variância explicada fica ao longo do segundo PC, ao qual é composto pelas variables year e rank, isso indicar que ao projeta em 2d, perdemos entorno de 5 % de variância. É impportante analisar que 100% da variância explicada é dada por 9 componentes!

A justificativa para essa afirmação, pode dizer que existe uma relação linear entre os dados, bem como, os dois primeiros PCs explica 95% da variância no dataset. Além disso, essa tal afirma da análise tem um forte impacto nos coeficientes de correlação que examinaremos nas seções subsequentes.

Recomendo consultar os livros com prioridade que abordem os conceitos de redução de dimensionalidade como; Hands-on: Machine Learning with Scikit-Learn & TensorFlow, 2nd ed e Machine Learning Pocket Reference: Working with Structured Data in Python


Summary¶

Vamos recapitular alguns pontos-chave deste capítulo:

A análise exploratória é um mecanismo analítico que fornece diversos insights sobre os dados, no qual compreendemos os estágios iniciais (fundamentais) para sua aplicabilidade, em que deve-se verificar em primeira instância; formato dataset, shape do dataset, valores nan, valores duplicados, lineariedade dos dados e assim por adiante.

O objetivo deste capítulo foi apresenta os conceitos fundamentais sobre a etapa da análise exploratória e sua aplicabilidade de forma bem conceitual.

3. Binary test¶

Segundo (Cathy.T, 2021) afirma que um experimento com resultado binário só tem dois resultados: uma ação é ou não executada. Um usuário conclui ou não um fluxo de registro, um consumidor clica ou não em um site, um estudante se gradua ou não. Porém, para esses tipos de experimentos, calculamos a proporção de cada variante que conclui a ação, o numerador é a quantidade de participantes que concluíram a ação, enquanto o denominador são todas as unidades que foram expostas. Essa métrica também é descrita como uma taxa: taxa de conclusão, taxa de cliques, taxa de graduação e assim sucessivamente.

De modo menos formal, para determinar se as taxas das variantes são estatisticamente diferentes, podemos usar o Chi-square test (χ2), que é um teste estatístico para variáveis categóricas.

Por outro ângulo, se suas variáveis são categóricas, como você as compara? Neste capítulo, explicaremos como testar duas variáveis categóricas no dataset (video games sales) para determinar se elas são dependentes uma da outra (ou seja, se correlacionam). Assim, usaremos um teste estatístico conhecido como Chi-squared (comumente escrito como χ2).

Antes de iniciarmos nossa argumentação sobre χ2, logo nas seções subsequentes tem um rápido resumo dos métodos do teste que podem ser usados para testar diversos tipos de variáveis:

3.1. Chi-square test (χ2)¶

O Chi-square test (χ2), é um método estatístico para fazer a inferência sobre a distribuição de uma variável ou para decidir se existe uma relação entre duas variáveis de uma população, em poucas palavras, é uma forma de verificar a relação entre duas variáveis nominais categóricas. A inferência depende da curva da distribuição χ2, dependente do número de graus de liberdade d.f. veja a figura a seguir.

Chi-square distribution with different degree of freedom

image.png

Source: (Chao De-Yu, 2022)

A curva de distribuição χ2 é assimétrica (discutiremos esse conceito de assimetria no capítulo 4) à direita é, à medida que o número de graus de liberdade aumenta, a curva χ2 se torna mais semelhante à distribuição normal.

Em outras palavras, o χ2 examina a independência de dois vetores categóricos. Em outros termos, a estatística é a diferença entre o número observado de observações em cada classe de uma variable categórica e o que esperaríamos se essa variable fosse independente (ou seja, sem relação) com o vetor alvo.

De modo menos formal, a ideia-chave por trás do χ2 é comparar os valores observados em seus dados com os valores esperados e ver se eles estão relacionados ou não. Em particular, é uma maneira útil de verificar se duas variáveis nominais categóricas estão correlacionadas. Isso é particularmente importante em ML, onde você deseja apenas recursos correlacionados ao destino a serem usados para certo tipo tarefa de treinamento, seja tarefas (Regressão ou Classificação).

Existem dois tipos de testes para χ2, mas em outras literaturas você pode encontra mais dois tipo de teste "homogeneidade e tedência". Porém, vamos referenciar os mais populares para este projeto, temos:

  • Teste de qualidade de ajuste χ2: esse método testa se uma variável tem probabilidade de vir de uma determinada distribuição.

  • Teste χ2 de Independência: esse método testa se duas variáveis podem estar correlacionadas ou não.

Confira https://www.jmp.com/en_us/statistics-knowledge-portal/chi-square-test.html para uma discussão mais detalhada dos dois teste χ2 citado anteriormente.

Em suma, podemos comparar se duas variáveis categóricas estão correlacionadas usando o Teste de Independência, onde o teste será aplicado nas variáveis genre and platform.

3.1.1. χ2 test of Independence¶

Como observado aos conceitosreferenciados anteriormente, o Test of Independence é usado para decidir se existe uma relação entre duas variáveis de uma população. A justificativa para tal afirmação é útil ao analisar os resultados da pesquisa de duas variáveis categóricas.

Para usar o χ2, você deve seguir algumas propriedades importantes:

  • H0 (Hipótese Nula): é que as 2 variáveis categóricas que estão sendo comparadas são independentes umas das outras.Em outras palavras, as duas variáveis categóricas não têm relação.

  • H1 (Hipótese Alternativa): é que as 2 variáveis categóricas que estão sendo comparadas são dependentes uma da outra. Isto significa, existe uma relação entre duas variáveis categóricas.

Um ponto importante é decide o valor de α. Porém, esse é o risco que você está disposto a correr ao chegar à conclusão errada. Por exemplo, digamos que você defina α=0.05 ao testar a independência. Isso significa que você está assumindo um risco de 5% de concluir que duas variáveis são independentes quando na realidade não são (Wei-Meng Lee, 2021).

Além do mais, calcular a pontuação do χ2 usando as duas variáveis categóricas e também usando o cálculo do p-value. Um p-value baixo significa que há uma alta correlação entre as duas variáveis categóricas (elas dependem uma da outra). O value-p é calculado a partir da pontuação do χ2. O p-value indicará se os resultados dos seus testes são significativos ou não.

Em uma análise do χ2, o p-value é a probabilidade de obter um χ2 tão grande ou maior que o do experimento atual e, ainda assim, os dados ainda apoiarão a hipótese. É a probabilidade de desvios do que era esperado ser devido ao mero acaso. Em geral, um value-p de 0.05 ou maior é considerado crítico, qualquer valor menor significa que os desvios são significativos e a hipótese testada deve ser rejeitada. Confira mais: https://passel2.unl.edu/view/lesson/9beaa382bf7e/8

Para calcular o p-value, (Wei-Meng Lee, 2021) ressaltar que você precisa de duas informações importantes de propriedades:

  • Graus de liberdade: é o número de categorias menos 1. Ou seja, o número de graus de liberdade das estatísticas do teste de independência χ2:

$$ d.f. = (rows - 1) * (columns - 1)$$

image.png

Source: (Chao.D.Y, 2021)

Se hipótese H0 for verdadeiro, cada célula do valor na tabela de contingência acima conterá uma frequência teórica ou esperada Eᵢⱼ, em oposição ao valor Oᵢⱼ observando que para cada célula temos:

Independência assumida:

image.png

Source: (Chao.D.Y, 2021)

A estatística de teste: Compara as diferenças entre Oᵢⱼ & Eᵢⱼ leva à estatística χ2, com [(r-1) x (c-1)] graus de liberdade, onde:

image.png

Source: (Chris.A, 2018)

Onde:

  • Oi é o número de observações na classe i
  • Ei é o número de observações na classe i que esperaríamos se não houvesse relação entre o recurso e o vetor de destino.

Por fim, a outra propriedade importante χ2 é:

  • Score χ2.

Se value-p obtido for:

  • p < 0.05 (o valor de α que você escolheu), você rejeita a H0 (hipótese nula) e aceita a H₁ (hipótese alternativa). Isso significa que as duas variáveis categóricas são dependentes.

  • p > 0.05 você aceita a H0 (hipótese nula) e rejeita a H0 (hipótese alternativa). Isso significa que as duas variáveis categóricas são independentes.

Além do mais, depois de calcular seu Score χ2, você também pode usá-la para consultar uma tabela de Score χ2 para ver se sua pontuação cai na zona de rejeição ou aceitação.- Score χ2.

Se value-p obtido for:

  • p < 0.05 (o valor de α que você escolheu), você rejeita a H0 (hipótese nula) e aceita a H1 (hipótese alternativa). Isso significa que as duas variáveis categóricas são dependentes.

  • p > 0.05 você aceita a H0 (hipótese nula) e rejeita a H0 (hipótese alternativa). Isso significa que as duas variáveis categóricas são independentes.

Além do mais, depois de calcular seu Score χ2, você também pode usá-la para consultar uma tabela de Score χ2 para ver se sua pontuação cai na zona de rejeição ou aceitação.

O χ2 é um número único que informa quanta diferença existe entre suas contagens observadas e as contagens que você esperaria se não houvesse nenhuma relação na população. No entatno, ao calcular χ2 entre um recurso e o vetor de destino, obtemos uma medida de independência entre os dois. Se variável target for independente da variável de destino, este recurso é irrelevante para nossos propósitos porque não contém nenhuma informação que possamos usar para classificação. Por outro lado, se os dois recursos forem altamente dependentes, eles provavelmente serão muito informativos para treinar nosso modelo de ML.

Dessa forma, podemos concluir que χ2 é um teste estatístico para variáveis categóricas. No entanto, geralmente os dados de um teste χ2 são exibidos na forma de uma tabela de contingência, que mostra a frequência de observações na interseção de duas variables, da mesma forma, ela parecerá com uma tabela dinâmica para quem estiver familiarizado com esse tipo de tabela.

Observação:

Em um melhor sentido da palavra nunca podemos aceita H0, em outras palavras, rejeitamos ou falhamos em rejeitar H0.

3.2. Applicability of the χ2 test¶

Podemos define agora as hipótese nula e hipótese alternativa. como mencionado anteriormente, chegamos a:

  • H0 (Hipótese Nula): é que as 2 variáveis categóricas a serem comparadas são independentes uma da outra. Em outros termos, as duas variáveis categóricas não têm relação.

  • H1 (Hipótese Alternativa): é que as 2 variáveis categóricas sendo comparadas são dependentes uma da outra. De outra maneira, existe uma relação entre duas variáveis categóricas.

Você conclui com base nas seguintes condições do valor p:

  • p < 0.05: isso significa que as duas variáveis categóricas estão correlacionadas.
  • p > 0.05: isso significa que as duas variáveis categóricas **não estão correlacionadas.

Com base nessa análise, para sustenta a justificativa para essa afirmação, conseguirmos formular nossa pergunta para problema de negócio, temos:

Pergunta:

  • Há alguma relação entre gênero do jogo com a plataforma de publicação do jogo? Ou melhor, quais plataformas de publicação dos jogos os jogadores prefere?

Hipóteses:

  • H0: Não há relação entre gênero do jogo e plataforma de publicação do jogo?
  • H1: Existe uma relação entre gênero do jogo e plataforma de publicação do?jogo

Se o p-value for menor que 0.05 rejeitamos a H0. Caso contrário, falhamos em rejeitar a H0.

A implementação para o teste está contida na seguinte função a seguir:

In [22]:
# Function call Chi-squared 
chi_score, degree_f, p = stats_calc.chi2(df_dropna,'genre','platform')
print(f'\nChi2_score: {chi_score}, \nDegrees of freedom: {degree_f} \np-value {p:,.4f}')
---------------------------------------- Observed (O) ----------------------------------------
platform 2600 3DO 3DS DC DS GB GBA GC GEN GG N64 NES NG PC PCFX PS PS2 PS3 PS4 PSP PSV SAT SCD SNES TG16 WS Wii WiiU X360 XB XOne Total
genre
Action 55 0 180 3 335 6 162 98 3 0 37 13 0 161 0 154 345 373 122 217 141 3 0 12 0 0 230 63 318 152 68 3251
Adventure 1 1 36 11 238 5 36 20 2 0 4 1 0 65 0 67 196 72 19 213 85 26 0 4 1 0 83 3 47 26 12 1274
Fighting 1 0 14 12 36 0 23 42 5 0 29 4 11 5 0 108 146 76 17 73 16 31 0 25 0 0 41 5 65 44 7 836
Misc 5 0 53 0 389 8 86 35 1 0 18 2 0 22 0 76 218 121 15 104 24 15 2 17 0 0 272 21 122 45 15 1686
Platform 9 0 28 2 89 18 139 73 7 1 30 28 0 11 0 64 101 36 11 36 10 5 1 26 0 0 57 16 24 49 4 875
Puzzle 8 1 19 0 236 15 39 12 0 0 12 14 0 25 0 32 18 2 1 44 3 5 0 13 0 0 54 4 6 7 0 570
Racing 4 0 10 6 66 2 64 60 1 0 57 4 0 56 0 144 212 90 17 65 11 8 1 9 0 0 92 3 102 122 19 1225
Role-Playing 0 0 85 4 196 21 73 25 3 0 7 11 0 103 1 97 183 117 47 191 82 17 1 50 0 4 35 6 75 23 13 1470
Shooter 22 0 6 3 42 1 40 48 1 0 24 7 0 145 0 96 158 155 34 37 5 22 0 10 1 0 61 10 197 124 33 1282
Simulation 1 1 28 1 280 5 18 12 0 0 10 0 0 112 0 60 89 30 5 29 3 7 0 9 0 0 84 1 36 24 3 848
Sports 10 0 25 10 146 9 88 106 3 0 79 14 1 49 0 221 391 210 43 130 23 16 0 49 0 0 256 8 215 166 36 2304
Strategy 0 0 15 0 78 7 18 11 1 0 9 0 0 184 0 70 70 22 5 58 7 18 1 15 0 2 25 3 27 21 3 670
Total 116 3 499 52 2131 97 786 542 27 1 316 98 12 938 1 1189 2127 1304 336 1197 410 173 6 239 2 6 1290 143 1234 803 213 16291
---Expected (E)---
platform 2600 3DO 3DS DC DS GB GBA GC GEN GG N64 NES NG PC PCFX PS PS2 PS3 PS4 PSP PSV SAT SCD SNES TG16 WS Wii WiiU X360 XB XOne Total
genre
Action 23.148732 0.598674 99.579461 10.377018 425.258179 19.357130 156.852618 108.160457 5.388067 0.199558 63.060340 19.556688 2.394696 187.185440 0.199558 237.274507 424.459947 260.223682 67.051501 238.870972 81.818796 34.523541 1.197348 47.694371 0.399116 1.197348 257.429869 28.536799 246.254619 160.245105 42.505862 3251.0
Adventure 9.071512 0.234608 39.023142 4.066540 166.649929 7.585661 61.467313 42.385857 2.111473 0.078203 24.712050 7.663863 0.938432 73.354122 0.078203 92.982997 166.337119 101.976306 26.276103 93.608618 32.063102 13.529065 0.469216 18.690443 0.156405 0.469216 100.881468 11.182984 96.502118 62.796759 16.657173 1274.0
Fighting 5.952735 0.153950 25.607022 2.668467 109.355841 4.977718 40.334909 27.813639 1.385550 0.051317 16.216070 5.029034 0.615800 48.135044 0.051317 61.015530 109.150574 66.916948 17.242404 61.426063 21.039838 8.877785 0.307900 12.264686 0.102633 0.307900 66.198515 7.338285 63.324781 41.207292 10.930452 836.0
Misc 12.005156 0.310478 51.642870 5.381622 220.542999 10.038794 81.345283 56.093058 2.794304 0.103493 32.703701 10.142287 1.241913 97.076177 0.103493 123.052851 220.129028 134.954515 34.773556 123.880793 42.432018 17.904242 0.620956 24.734762 0.206985 0.620956 133.505617 14.799460 127.710024 83.104659 22.043951 1686.0
Platform 6.230434 0.161132 26.801608 2.792953 114.457369 5.209932 42.216561 29.111166 1.450187 0.053711 16.972562 5.263643 0.644528 50.380578 0.053711 63.861948 114.242527 70.038672 18.046774 64.291633 22.021361 9.291940 0.322264 12.836842 0.107421 0.322264 69.286723 7.680621 66.278927 43.129642 11.440366 875.0
Puzzle 4.058683 0.104966 17.459333 1.819409 74.560800 3.393898 27.501074 18.963845 0.944693 0.034989 11.056412 3.428887 0.419864 32.819348 0.034989 41.601498 74.420846 45.625192 11.756184 41.881407 14.345344 6.053035 0.209932 8.362286 0.069977 0.209932 45.135351 5.003376 43.175987 28.095881 7.452581 570.0
Racing 8.722608 0.225585 37.522252 3.910134 160.240317 7.293905 59.103186 40.755632 2.030262 0.075195 23.761586 7.369100 0.902339 70.532810 0.075195 89.406728 159.939537 98.054140 25.265484 90.008287 30.829906 13.008716 0.451169 17.971579 0.150390 0.451169 97.001412 10.752870 92.790498 60.381499 16.016512 1225.0
Role-Playing 10.467129 0.270702 45.026702 4.692161 192.288380 8.752686 70.923823 48.906758 2.436315 0.090234 28.513903 8.842919 1.082806 84.639371 0.090234 107.288073 191.927445 117.664968 30.318581 108.009944 36.995887 15.610460 0.541403 21.565895 0.180468 0.541403 116.401694 12.903444 111.348597 72.457799 19.219815 1470.0
Shooter 9.128476 0.236081 39.268185 4.092075 167.696397 7.633294 61.853293 42.652016 2.124731 0.078694 24.867227 7.711988 0.944325 73.814744 0.078694 93.566877 167.381622 102.616660 26.441102 94.196427 32.264440 13.614020 0.472163 18.807808 0.157388 0.472163 101.514947 11.253207 97.108096 63.191087 16.761770 1282.0
Simulation 6.038181 0.156160 25.974587 2.706771 110.925542 5.049168 40.913879 28.212878 1.405439 0.052053 16.448837 5.101222 0.624639 48.825978 0.052053 61.891351 110.717329 67.877478 17.489902 62.307777 21.341845 9.005218 0.312320 12.440734 0.104107 0.312320 67.148732 7.443619 64.233749 41.798785 11.087349 848.0
Sports 16.405623 0.424283 70.572463 7.354245 301.382604 13.718495 111.162237 76.653858 3.818550 0.141428 44.691179 13.859923 1.697133 132.659260 0.141428 168.157633 300.816893 184.421828 47.519735 169.289055 57.985391 24.467006 0.848567 33.801240 0.282856 0.848567 182.441839 20.224173 174.521883 113.566509 30.124118 2304.0
Strategy 4.770732 0.123381 20.522374 2.138604 87.641643 3.989319 32.325824 22.290835 1.110429 0.041127 12.996133 4.030446 0.493524 38.577128 0.041127 48.900006 87.477135 53.629611 13.818673 49.229022 16.862071 7.114971 0.246762 9.829354 0.082254 0.246762 53.053833 5.881161 50.750721 33.024983 8.760052 670.0
Total 116.000000 3.000000 499.000000 52.000000 2131.000000 97.000000 786.000000 542.000000 27.000000 1.000000 316.000000 98.000000 12.000000 938.000000 1.000000 1189.000000 2127.000000 1304.000000 336.000000 1197.000000 410.000000 173.000000 6.000000 239.000000 2.000000 6.000000 1290.000000 143.000000 1234.000000 803.000000 213.000000 16291.0
---------------------------------------- Chi-Square ----------------------------------------
platform 2600 3DO 3DS DC DS GB GBA GC GEN GG N64 NES NG PC PCFX PS PS2 PS3 PS4 PSP PSV SAT SCD SNES TG16 WS Wii WiiU X360 XB XOne Total
genre
Action 43.825434 0.598674 64.947761 5.244319 19.156690 9.216910 0.168920 0.954460 1.058425 0.199558 10.769706 2.198233 2.394696 3.663091 0.199558 29.226248 14.875098 48.875252 45.030126 2.002501 42.806973 28.784232 1.197348 26.713595 0.399116 1.197348 2.922729 41.620371 20.902754 0.424236 15.290857 486.865221
Adventure 7.181747 2.497036 0.234204 11.821566 30.548063 0.881353 10.551690 11.822967 0.005885 0.078203 17.359507 5.794346 0.938432 0.951431 0.078203 7.260641 5.289779 8.811644 2.014822 152.275531 87.400000 11.495563 0.469216 11.546495 4.550047 0.469216 3.169531 5.987779 25.392807 21.561646 1.302097 449.741446
Fighting 4.120725 0.153950 5.261173 32.632030 49.207059 4.977718 7.450099 7.235760 9.428923 0.051317 10.078204 0.210560 175.108125 38.654416 0.051317 36.179976 12.440431 1.232899 0.003408 2.180768 1.207232 55.125504 0.307900 13.224001 0.102633 0.307900 9.591834 0.745076 0.044317 0.189268 1.413341 478.917861
Misc 4.087595 0.310478 0.035664 5.381622 128.672237 0.414062 0.266351 7.931767 1.152175 0.103493 6.610837 6.536676 1.241913 58.061952 0.103493 17.992032 0.020591 1.442919 11.243990 3.190534 8.006673 0.471096 3.062633 2.418723 0.206985 0.620956 143.669568 2.597845 0.255300 17.471524 2.250833 435.832516
Platform 1.231133 0.161132 0.053584 0.225129 5.662175 31.398845 221.880554 66.168074 21.238928 16.671996 9.999325 98.209928 0.644528 30.782297 0.053711 0.000298 1.535020 16.542735 2.751574 12.449777 6.562407 1.982444 1.425311 13.497768 0.107421 0.322264 2.178824 9.011259 26.969472 0.799012 4.838923 605.355847
Puzzle 3.827346 7.631867 0.135953 1.819409 349.548489 39.689341 4.808005 2.557242 0.944693 0.034989 0.080529 32.590291 0.419864 1.862993 0.034989 2.215996 42.774465 41.712863 9.841246 0.107170 8.972725 0.183195 0.209932 2.572071 0.069977 0.209932 1.741030 0.201217 32.009784 15.839909 7.452581 612.100090
Racing 2.556921 0.225585 20.187337 1.116979 55.424487 3.842308 0.405711 9.086982 0.522809 0.075195 46.494882 1.540328 0.902339 2.994387 0.075195 33.335583 16.945727 0.661565 2.704014 6.948409 12.754667 1.928495 0.667632 4.478696 0.150390 0.451169 0.257874 5.589856 0.914048 62.880845 0.555751 296.676165
Role-Playing 10.467129 0.270702 35.487044 0.102104 0.071643 17.137222 0.060777 11.686178 0.130419 0.090234 16.232363 0.526183 1.082806 3.982930 9.172547 0.986544 0.415257 0.003758 9.178192 63.765882 54.745819 0.123688 0.388455 37.489671 0.180468 22.094238 56.925596 3.693397 11.865623 33.758600 2.012823 404.128292
Shooter 18.149375 0.236081 28.184958 0.291448 94.215406 5.764299 7.720954 0.670564 0.595379 0.078694 0.030244 0.065732 0.944325 68.649437 0.078694 0.063271 0.525833 26.740437 2.160913 34.729887 23.039287 5.165606 0.472163 4.124749 4.511132 0.472163 16.169648 0.139563 102.755514 58.516542 15.731041 520.993341
Simulation 4.203793 4.559855 0.157935 1.076215 257.705953 0.000479 12.832952 9.316930 1.405439 0.052053 2.528294 5.101222 0.624639 81.738397 0.052053 0.057798 4.259878 21.136663 8.919299 17.805290 15.763552 0.446508 0.312320 0.951604 0.104107 0.312320 4.228899 5.577962 12.410058 7.579090 5.899085 487.120640
Sports 2.501094 0.424283 29.428609 0.951834 80.109977 1.622933 4.826182 11.234869 0.175466 0.141428 26.338423 0.001416 0.286362 52.758260 0.141428 16.605346 27.036357 3.547535 0.429885 9.118309 21.108378 2.930076 0.848567 6.834137 0.282856 0.848567 29.657687 7.388703 9.388381 24.208466 1.146125 372.321938
Strategy 4.770732 0.123381 1.486018 2.138604 1.060698 2.272117 6.348770 5.719075 0.010982 0.041127 1.228756 4.030446 0.493524 548.195586 0.041127 9.104493 3.491772 18.654476 5.627819 1.562697 5.768001 16.652751 2.299250 2.719974 0.082254 12.456712 14.834321 1.411471 11.115049 4.378510 3.787443 691.907937
Total 106.923025 17.193024 185.600241 62.801260 1071.382878 117.217584 277.320965 144.384871 36.669522 17.618286 147.751070 156.805360 185.081553 892.295177 10.082313 153.028227 129.610209 189.362746 99.905288 306.136756 288.135714 125.289156 11.660726 126.571483 10.747386 39.762785 285.347539 83.964497 254.023107 247.607647 61.680900 5841.961294
Chi2_score: 5841.961294371332, 
Degrees of freedom: 330 
p-value 0.0000

Indicadores:¶

Nesse caso, p-value é: 0.0 < 0.05, portanto, esse resultado é considerado "significativo", o que significa que pensamos que as variáveis não são independentes.

Em outras palavras, como p-value é: 0.0 < 0.05, pensamos que gênero do jogo está ligado à preferência pela platforma de publicação do jogo (jogadores têm preferências diferentes de escolhas de acordo com as plataformas de lançamentos). Portanto, temos evidências suficientes de que existe uma associação entre gênero do jogo e plataforma de publicação do jogo, ao nível de significância de 5%. A probabilidade de erro ao fazermos tal afirmação é nula.

Da mesma forma, a justicativa para essa afirmação poder ser considera feita a analisando redução dimensionalide usando PCA (discutido no capítulo 2.3), no qual o primeiro componente (PC) explica entorno 49% da variância explicada que são composta pelas variables genre e platform no dataset, veja a figura a seguir desta justificativa.

image.png

Segundo (Wei-Meng Lee, 2021) ressalta que o coeficiente de Pearson e o coeficiente de classificação de Spearman medem a força de uma associação entre duas variáveis, o teste χ2 mede a significância da associação entre duas variáveis. O que ele diz é se a relação que você encontrou na amostra provavelmente existe na população, ou quão provável é por acaso devido a um erro de amostragem.

Em síntese, (Wei-Meng Lee, 2021) defende que χ2 é sensível a pequenas frequências em sua tabela de contingência. Ainda mais, se uma célula em sua tabela de contingência tiver uma frequência de 5 ou menos, o teste χ2 levará a erros de conclusão. Além disso, o teste χ2 não deve ser usado se o tamanho da amostra for menor que 50.

Seguindo análise (Wei-Meng Lee, 2021) quantificaremos mais insights sobre video games sales data analysis. No próximo capítulo, abordaremos conceitos interligados análise de correlação.

Summary¶

Este capítulo, fornece a idea de como a checagem sobre lineariedade dos dados tem impacto na analises posteriores.

O teste χ2 e PCA tem uma associação forte em termos de análise significativas sobre os dados e quantificar os resultados muitos próximos da assertividade, ou seja, a significância das estimativas.


4. Continuous tests¶

Segundo (Cathy.T, 2021) afirma que muitos experimentos tentam melhorar as métricas contínuas, em vez dos resultados binários discutidos na última seção. As métricas contínuas podem usar diferentes valores. Alguns exemplos seriam a quantia gasta pelos clientes, o tempo gasto na página e os dias durante os quais uma aplicação foi usada.

Além do mais, os experimentos com métricas de sucesso contínuas, no qual o objetivo é descobrir se os valores das médias de cada variante diferem uns das outras de maneira estatisticamente significativa. O teste estatístico extensivamente popular e relevante é o teste t para duas amostras, que determina se podemos rejeitar a hipótese nula de que as médias são iguais com um intervalo de confiança definido, geralmente de 95%.

4.1. Correlation¶

Segundo (GORI, 2017) defende que a estatística moderna reserva, entretanto, o termo regressão ao estudo de uma variável dependente em função de uma ou mais variáveis, as variáveis explanatórias. O objetivo central dessas análises é estimar ou prever o valor médio da variável dependente a partir de variações na variável explanatória ou independente. Para melhor compreender os objetivos e aplicações da regressão em estatística (discutido na parte 2 do projeto), será inicialmente apresentada a análise de correlação, estreitamente relacionada à análise de regressão, mas conceitualmente diferente.

Desta forma, a análise de correlação nos permite medir a força e direção de um relacionamento linear entre duas variáveis. Em outras palavras, um dos principais objetivos da análise de correlação é (identificar e quantificar) a relação entre duas variáveis.

Análise de regressão prevê o valor médio de uma variável com base nos valores estabelecidos de uma ou mais variáveis, ou seja, usamos a correlação para medir o grau de relação entre duas variáveis e depois usamos regressão para estudar o relacionamento entre elas.

A correlação medirá a aproximação dos desvios padronizados (Zx e Zy) em relação a uma reta. Mantém-se a proporcionalidade e se elimina as distorções das diferentes escalas de medida, passando todas a referir-se a unidades de desvios-padrão.

A correlação assume valores entre –1 e +1 (inclusive) e permite uma interpretação intuitiva do grau de associação linear entre duas variáveis. Assim como, quão mais próximo o valor estiver dos extremos, mais próxima a dispersão dos pontos estará de uma reta com inclinação negativa (ρ ≈ – 1) ou positiva (ρ ≈ + 1).

  • p: é um número entre -1 e 1 (-1 ≤ p ≤ 1):

Um valor de p próximo a -1 : significa que há correlação negativa entre as variáveis (quando uma aumenta a outra diminui e vice-versa)

Um valor de p próximo de 0: indica que as 2 variáveis não estão correlacionadas (não existe relação linear entre elas)

Um valor de próximo de 1 : indica uma relação linear positiva entre as 2 variáveis (quando uma aumenta, a outra também aumenta)


Lembrete!

Grandeza diretamente proporcionais

  • O aumenta de uma implica o aumento da outra. Em poucas palavras, aumentando o valor X, o valor de Y também tende a aumentar.
  • A redução de uma implica a redução da outra.

Ex: número de biscoitos e quantidade de trigo.

Grandezas inversamente proporcionais

  • O aumento de uma implica a redução da outra.
  • A redução de uma implica o aumento da outra.

Ex: velocidade média de um automóvel e tempo de viagem


A figura a seguir ilustra a correlação assumindo valores entre -1 e +1

image.png

Source: (Alexandre.G, 2017)

De acordo, com alguns Phd em estastítica, geralmente eles/elas usa o coeficiente de correlação p que situam-se acima 0,7 ou 0,8 para distinguir altas correlações entre as variáveis.

Importante assinalar que (GORI, 2017) refina que a correlação não capta a proporcionalidade da associação, mas sim o grau de associação linear. Em outras palavras, uma correlação forte significa que, dadas variações em X, será muito provável que haja variações (positivas ou negativas) em Y, não importa em que razão (quanto Y variará em função de variações em X). Uma correlação nula também não implica necessariamente ausência de associação entre duas variáveis, visto que a correlação refere-se exclusivamente à associação linear.

4.1.2. Correlation does not imply causation¶

Não é porque o valor de p entre X e Y é forte que assumimos que X é a causa de Y, ou vice-versa. Assim como, só porque X acontece juntamente com Y não significa que X causa Y.

É mais fácil provar que dois valores estão correlacionados (eles aumentam ou diminuem juntos, ou um existe principalmente na presença do outro) do que provar que um causa o outro. Por que isso ocorre? Embora nossos cérebros estejam estruturados para detectar causalidade, na verdade há cinco maneiras pelas quais dois valores, X e Y, podem estar relacionados um com o outro:

Do mesmo modo, temos que analisar a relação de causalidade, é necessário uma investigação adicional em função de diferentes cenários que podem ocorrer:

  1. X causa realmente Y: É claro que é isso que todos nós tentamos encontrar. Por meio de alguns mecanismos, Y é o resultado de X.

  2. Y pode ser a causa de X; O relacionamento está lá, mas a direção da causalidade está invertida. Por exemplo, os guarda-chuvas não causam chuva, mas a presença de chuva faz as pessoas usarem guarda-chuvas.

  3. X e Y têm uma causa comum; Os valores estão relacionados porque há uma terceira variável que os explica. Por exemplo, tanto as vendas de sorvetes quanto o uso de aparelhos de ar-condicionado aumentam no verão, mas um não causa o outro, assim como, as temperaturas mais altas causam os dois aumentos.

  4. Existe um loop de feedback entre X e Y; Quando Y aumenta, X aumenta para compensar, o que por sua vez leva ao aumento de Y e assim continuamente. Isso pode ocorrer quando um cliente está no processo de mudar de fornecedor de um serviço. Menos interações levam a menos itens para serem sugeridos ou lembrados, o que leva a menos interações e assim seguidamente. A falta de recomendações causa menos engajamento ou é o contrário?

  5. Não há relacionamento; É apenas um fenômeno aleatório, se você procurar bastante, encontrará métricas que estão correlacionadas ainda que não exista um relacionamento real entre elas.

A correlação pode ser apenas uma coincidência, ou seja, os dois eventos não têm qualquer relação, além do fato de ocorrerem ao mesmo tempo. Se estivermos falando de um estudo científico manipulando uma amostra grande, isso ajuda a reduzir a probabilidade de coincidência. Dessa maneira, dependendo principalmente da complexidade do problema, mas a verdade é que a causalidade dificilmente poderá ser determinada com certeza absoluta.


Em concordância aos conceitos mencionados anteriormente, podemos plotar a matrix de correlation com destino de encontrar as correlações entre as variables mais significativas para análise de regressão que examinaremos no (capítulo 5), isso pode ser feito com mais detalhes usando método de Pearson, da mesma forma, como temos uma relação linear entre os dados, conforme a verificação rápida do PCA discutida (capítulo 2) sobre lineariedade dos dados, sendo assim, vamos usar coeficiente de Pearson para este cenário, ao qual se destina na análise de correlação.

É importante frisar, assim como, o dataset identifica-se com uma relação linear sobre os dados, método Pearson é adequado para este cenário, por outro lado, se os dados não apresentarem uma relação linear entre os dados os métodos, **Spearman e Kendall*** seria o ideal.

A implementação da função a seguir tem como objetivo remove os recursos colineares em um dataframe com o coeficiente de correlação maior que limite determindado na correlação e que tem a menor correlação com a variável alvo (dependente). Logo, a remoção de recursos colineares pode ajudar um modelo generalizar melhor e favorece também na interpretabilidade do modelo. No entanto, Deep Learning (DL) quebra boa parte desse paradigma, ou seja,o algoritmo de DL desfruta do talento natural de extrair e aprender representações de dados condensados sem muita operação de engenharia de recursos.

In [23]:
# Function call to calculate correlation matrix based on pearson's method
df_rm_collinearity = stats_calc.remove_collinear_features(df_model=df_fit,
                                             target_var='global_sales',
                                             threshold= 0.85, 
                                             verbose=True)
# Plot
graphic.plot_matrix_corr(df_rm_collinearity,'gridon')
year | rank | 0.93
year: 0.538
rank: -0.686
dropped: rank
-----------------------------------------------------------------------------
dropped columns: 
['rank']
-----------------------------------------------------------------------------
used columns: 
['year', 'na_sales', 'eu_sales', 'jp_sales', 'other_sales', 'global_sales', 'genre', 'platform']

Indicadores¶

Conforme os resultados sugerem, existe uma associação linear positiva, ou melhor, há um forte grau de associação entre as variables na_sales, eu_sales, other_sales e jp_sales com global_sales. Acrescente-se que, essa análise é o que destaca os pontos chaves para (OKRs) deste projeto.

Vejamos o exemplo a seguir:

  • Existe um forte grau de associação linear entre vendas na América do Norte e vendas na Europa, sugerindo, por exemplo, que o aumento das vendas na América do Norte, a tendência é que os rendimentos das vendas na Europa também aumentem.

4.2. Statistical tests¶

4.2.1. Applicability normality Test (Shapiro-Wilks Test)¶

Quando tomanos o nome teste de normalidade, ficamos confusos sobre como encontrar o melhor teste para saber se a variável segue uma distribuição normal. Existe muitos testes estatísticos, incluindo de correlação, regressão, teste t e análise de variância (ANOVA), assumem certas características sobre os dados, ou melhor, poussi estimativas de parâmetros. Assim, de fato os testes requerem que os dados segue uma distribuição normal. Esses testes são conhecidos de testes paramétricos, porque sua validade depende da distribuição dos dados.

Ainda mais, antes de usar testes paramétricos devemos executar alguns testes preliminares para garantir que as suposições do teste sejam atendidas. Nos casos em que as suposições são violadas, testes não paramétricos são recomendados. É importante destacar que os testes não paramétricos geralmente são menos poderosos do que os testes paramétricos correspondentes quando vigora a suposição de normalidade. Assim, é menos provável que você rejeite a hipótese nula quando ela é falsa se os dados vierem da distribuição normal.

Os métodos não paramétricos são úteis quando a suposição de normalidade não se sustenta e seu tamanho da amostra é pequeno.

É possível usar um teste de significância comparando a distribuição da amostra com a normal, com interesse de investigar se os dados mostram ou não um desvio śerio de normalidade.

Existem diversos métodos para o teste de normalidade, como o teste de Shapiro-Wilk. O método de Shapiro-Wilk é amplamente recomendado para teste de normalidade. É baseado na correlação entre os dados e as pontuações normais correspondentes, e é ele que utilizaremos em nossas análises a seguir. Este teste é uns dos mais popular para aferir a normalidade dos dados.

As hipóteses deste teste incluem:

  • H0 (Hipótese Nula): Os dados são normalmente distribuídos. Em outros termos, amostra vem de uma distribuição normal.

  • H1 (Hipótese Alternativa): Os dados não são normalmente distribuídos. De outro modo, a amostra não vem de uma distribuição normal.

Em poucas palavras, o teste de Shapiro-Wilk calcula se uma amostra aleatória de dados, segue uma distribuição normal. Quando o valor de p é menor ou igual a 0.05 (assumindo um nível de confiança de 95%), os dados não são normais. Portanto, se este teste falhar, você pode afirmar com 95% de confiança que seus dados não se encaixam próximo de uma distribuição normal

  • Se o valor-p for maior que 0.05 não rejeitamos a hipótese nula e podemos assumir a normalidade dos dados.
  • Se o valor-p for menor que 0.05 rejeitamos a hipótese nula e não podemos assumir a normalidade dos dados.

A implementação da função a seguir mostra o teste de normalidade e a distribuição das variables

In [24]:
# Apply the normality test
sw=stats_calc.shapiro_test(df_fit)
# Plot
graphic.plot_hist(df_fit)
Approach : The p-value approach to hypothesis testing in the decision rule

Variable: ['rank']

H1 is accepted, which is in the 99.9% region of acceptance -> Null Hypothesis is rejected.
SW-statistic: 0.5795271396636963	 p-value: 0.00000

----------------------------------------------------------------------------------------------------
Variable: ['year']

H1 is accepted, which is in the 99.9% region of acceptance -> Null Hypothesis is rejected.
SW-statistic: 0.7977225184440613	 p-value: 0.00000

----------------------------------------------------------------------------------------------------
Variable: ['na_sales']

H1 is accepted, which is in the 99.9% region of acceptance -> Null Hypothesis is rejected.
SW-statistic: 0.21202176809310913	 p-value: 0.00000

----------------------------------------------------------------------------------------------------
Variable: ['eu_sales']

H1 is accepted, which is in the 99.9% region of acceptance -> Null Hypothesis is rejected.
SW-statistic: 0.20667648315429688	 p-value: 0.00000

----------------------------------------------------------------------------------------------------
Variable: ['jp_sales']

H1 is accepted, which is in the 99.9% region of acceptance -> Null Hypothesis is rejected.
SW-statistic: 0.1662326455116272	 p-value: 0.00000

----------------------------------------------------------------------------------------------------
Variable: ['other_sales']

H1 is accepted, which is in the 99.9% region of acceptance -> Null Hypothesis is rejected.
SW-statistic: 0.16339361667633057	 p-value: 0.00000

----------------------------------------------------------------------------------------------------
Variable: ['global_sales']

H1 is accepted, which is in the 99.9% region of acceptance -> Null Hypothesis is rejected.
SW-statistic: 0.22835862636566162	 p-value: 0.00000

----------------------------------------------------------------------------------------------------
Variable: ['genre']

H1 is accepted, which is in the 99.9% region of acceptance -> Null Hypothesis is rejected.
SW-statistic: 0.9222253561019897	 p-value: 0.00000

----------------------------------------------------------------------------------------------------
Variable: ['platform']

H1 is accepted, which is in the 99.9% region of acceptance -> Null Hypothesis is rejected.
SW-statistic: 0.6835917234420776	 p-value: 0.00000

----------------------------------------------------------------------------------------------------
No description has been provided for this image

Indicadores¶

Em primeira análise, podemos ver que nenhuma das variáveis é normalmente distribuída, pois a hipótese nula é rejeitada. A justificativa para essa afirmação é feita analisando nível de confiança de 99.9%, os p-value calculados pelo teste de Shapiro-Wilk são menores que alfa. Ainda assim, os dados tem uma assimetria positiva, em outros termos, os dados está relativamente distribuído na extremidade inferior do gráfico. No entanto, você pode ver posteriormente a definição de assimetria e os conceitos interligados a sua aplicabilidade no processo da análise exploratória neste projeto. Mas, antes disso, veja o detalhe dessa tal afirmação do Shapiro-Wilks Test

O que isso significa?

Vejamos o exemplo considerando a Variable: ['jp_sales']

  • Hipótese H0

Como valor p<α, rejeitamos H0. Supõe-se que os dados não sejam normalmente distribuídos.Em outras palavras, a diferença entre a amostra de dados e a distribuição normal é grande o suficiente para ser estatisticamente significativa.

  • Valor P

O valor p é igual a 0,0 ( P(x ≤ Infinity) = 1). Isso significa que a chance de erro tipo I (rejeitar uma H0 correta) a probabilidade de erro ao fazermos tal afirmação é nula. Ainda mais, quanto menor o valor p, mais ele sustenta H1.

  • Estatística de teste

A estatística de teste W é igual ao infinito, que não está na região de aceitação de 95%

4.2.2. Skewness¶

É o grau de desvio ou afastamento da simetria de uma distribuição. Quando a curva é simétrica, a média, a mediana e a moda coincidem, num mesmo ponto, de ordenada máxima, havendo um perfeito equilíbrio na distribuição. Acrescentado-se que, quando o equilíbrio não acontece, isto é, a média, a mediana e a moda recaem em pontos diferentes da distribuição, isto significa que será assimétrica; enviesada a direita ou esquerda. A figura a seguir simplifica os detalhes deste conceito.

image.png

Source: (Seabstian.T, 2023)

Uma outra definição mais abrangente do coefiente de Skewness é uma medida da assimetria da distribuição de probabilidade de uma variável aleatória do valor real sobre sua média. O valor da assimetria pode ser positivo, negativo ou indefinido.

O coeficiente de assimetria é o que nos permite dizer se uma determinada distribuição é assimétrica ou não em torno da média. Em poucas palavras é quanto a sua curva de frequência se desvia ou se afasta da posição simétrica.


  • Sk = 0: dados simétricos. Tanto a cauda do lado direito quanto a do lado esquerdo da função densidade de probabilidade são iguais.

Distribuição Assimétrica: média = mediana = moda

  • Sk < 0: Assimetria Negativa: Distribuição assimétrica Negativa ou enviesada a esquerda é quando os valores se concentram na extremidade superior da escala e se distribuem gradativamente em direção à extremidade inferior.Ou seja, cauda esquerda é mais longa, assim sendo, a cauda do lado esquerdo da função densidade de probabilidade é maior que a do lado direito.

Assimetria negativa: moda > mediana > média


  • Sk > 0: Assimetria Positiva: Distribuição assimétrica Positiva ou enviesada a direita é quando os valores se concentram na extremidade inferior da escala e se distribuem gradativamente em direção à extremidade superior.Ou seja, cauda direita é mais longa, refinando que a cauda do lado direito da função densidade de probabilidade é maior do que a cauda do lado esquerdo.

Assimetria positiva: média > mediana > moda

Além do mais, quando os dados estão distorcidos, a região da cauda pode se comportar como um valor atípico para o modelo estatístico, e os valores atípicos afetam o desempenho do modelo, especialmente os modelos baseados em regressão. Alguns modelos estatísticos são resistentes a discrepâncias, como os modelos baseados em árvore, mas limitarão a possibilidade de experimentar outros modelos. Portanto, há uma necessidade de transformar os dados distorcidos para perto o suficiente de uma distribuição normal.

É importante destacar que uma "distribuição de dados ruim", não significa intrinsecamente que os dados são inválido ou inúteis, mas sim que a distribuição dos dados pode não atender às premissas de determinados métodos estatístico, especialmente aqueles que assumem normalidade na distribuição dos dados.

É importante enfatizar que uma “má distribuição de dados” não significa inerentemente que os dados sejam inválidos ou inúteis, mas que a distribuição dos dados pode não atender aos pressupostos de certos métodos estatísticos, especialmente aqueles que assumem normalidade na distribuição dos dados.

Um vez que valores estatísticos exposto, conforme a figura seguir mostra, seguindo análise do conceito discutido anteriormente, temos:

Na figura, temos algumas estatísticas assumidas:

  • valor mín: year 1980
  • valor máx: year 2020

Interquatile range or IQR:

  • O IQR descreve os 50% dos valores quando classificados do menor para o maior. IQR é a diferença entre o terceiro quartil e o primeiro quartil.

Dessa forma, temos Q1 apontando para year 2003 no qual identifica que 25% das observações (years) está abaixo do valor Q1 e Q3 apontando year 2010 onde identifica que 75% das observações está abaixo do valor Q3. Isso mostra que os dados tem Skewness negativa -1.0025... os valores dos years se concentram na extremidade inferior da escala e se distribuem gradativamente em direção à extremidade superior. Em poucas palavras, a variable year tem uma melhor distribuição iniciando no year 1996 a 2015 exposto no histograma.

Desvio padrão:

  • Desvio significa apenas o quão longe do normal

O desvio padrão mede a dispersão ou variabilidade dos dados em relação à média. Isto é, quanto mais próximo de zero estiver o desvio padrão, mais próximo da média econtra-se os valores no conjunto de dados observado. A distribuição normal nos fornece informações valiosas em termos da porcentagem de dados dentro de um, dois e três desvios padrão da média.

  • O desvio padrão é um medida de quão espalhados os números estão. Em poucas palavras o desvio padrão é variabilidade entorno da média.

Acresenta-se que, temos o desvio padrão: 5.8324... isso mostra que os dados estão muito dispersos (espalhados) em torno da média.

Coeficiente de variação:

O coeficiente de variação (CV) indica a quantidade de variação de um conjunto de dados em relação a média. O valor é dado por uma relação direta do quociente entre o desvio padrão com a média da amostra.

O CV, mede o desvio padrão em termos de percentual da média.

  • Um CV alto, indica alta variabilidade dos dados, ou seja, menos consistência dos dados.
  • Um CV menor, indica mais consistência dentro do conjunto de dados.

Ainda por cima, de modo menos formal, CV analisa a dispersão de forma relativa e é dado em porcentagem (%). Quanto menor o CV, mais uniformes são os dados, ou seja, menor é a dispersão em torno da média. De um modo geral, se o CV:

  • Valor menor ou igual a 15% → baixa dispersão: dados homogêneos

  • Valor entre 15 e 30% → média dispersão

  • Valor maior que 30% → alta dispersão: dados heterogêneos

Acrescentando-se que, temos CV extremamente baixo, no qual mostra que a variable year se aproxima da média.

No entanto, temos mais alguns outras estatísticas como: sum, variance, mad, percentile que são contabilizadas ao resumo.

image.png

Summary¶

Vamos recapitular alguns pontos-chave deste capítulo:

Neste capítulo exploramos os conceitos elementares de estastística, como teste binários e contínuos, e também algumas estastíticas resumidas, no qual as explicações desses conceitos se relaciona para tal finalidade da análise exploratória no contexto do projeto sobre a direção da sumarização de dados e padrões identificação dos dados.

Em resumo, existem várias maneiras de examinar a análise de dados, usando uma variedade de cálculos estastístico e matemáticos. Embora todos alcancem o mesmo resultado, seu desempenho pode diferir ao tal método selecionado.


Part 2. Objectives and Key Results (OKRs)¶

De acordo (SALIM.I; MICHAEL.S; YURI.V, 2018) afirmam que muitas Organizações Exponeciais (ExOs) estão adotando o método dos Objetivos e Resultados-Chave (OKR – Objectives and Key Results). Inventado na Intel pelo CEO Andy Grove e levado ao Google pelo capitalista de risco John Doerr, em 1999, os OKRs acompanham as metas individuais, das equipes e da empresa e expõem os resultados de uma forma aberta e transparente. Em High Output Management, o manual altamente conceituado de Grove, ele introduziu os OKRs como a resposta a duas perguntas simples.

    1. Aonde quero ir? (Objetivos.)
    1. Como sei que estou chegando lá? (Resultados-chave para garantir que o progresso esteja ocorrendo.

Além da Intel e do Google, outras empresas de rápido crescimento que utilizam o sistema incluem LinkedIn, Zynga, Oracle, Twitter e Facebook.

Além do mais, os autores ressalta que um programa de OKRs, como o próprio nome sugere, opera ao longo de dois trajetos. Um objetivo, por exemplo, poderia ser "aumentar as vendas em 25%", juntamente com "formar duas parcerias estratégicas" e "conduzir uma campanha de AdWords como sendo os resultados-chave desejados. Os OKRs envolvem foco, simplicidade, ciclos de feedback (mais) curtos e transparência. Como resultado, insights e melhorias são mais fáceis de ver e implementar. Em contraste, a complexidade, o sigilo e objetivos amplos tendem a impedir o progresso, muitas vezes resultando em consequências imprevisíveis.

Além disso, os OKRs também são indicadores importantes para as corporações, embora os OKRs sejam mais importantes em novas startups, onde altas taxas de crescimento de contratações exigem um ciclo de feedback mais curto. Mas as grandes empresas também precisam deles porque os OKRs:

  • Incentivam o pensamento disciplinado (grandes metas virão à tona);

  • Aumentam a comunicação eficaz (todos aprendem o que é importante);

  • Estabelecem indicadores para medir o progresso (mostram em que ponto a empresa se encontra);

  • Focalizam no esforço (e, assim, sincronizam a organização).Incentivam o pensamento disciplinado (grandes metas virão à tona);


Na próxima seção deste capítulo, o objetivo é atingir as métricas de desempenho dos OKRs e alcançar resultados satisfatórios, onde diferentes tipos de conhecimento analítico são aplicados com o objetivo de usar técnicas mensuráveis em aplicações de tomada de decisão orienta por dados com taxa máxima de assertividade, onde a informação acelera tudo.

5.1. Regression Analysis¶

Embora a correlação seja uma medida útil do grau de associação entre duas variáveis, não explica algumas questões fundamentais, qual seria a variação em Y dada uma variação em X?, qual o valor esperado de Y dado um valor de X? Para responder essas e outras questões, devemos realizar uma análise de Regressão linear.

Em nenhum lugar vínculo entre estatísticas e ciência de dados é mais forte do que no reino da previsão especificamente, a previsão de uma variável do resultado (alvo) com base nos valores de outras variáveis "preditoras". Este é um processo de treinamento de um modelo usando dados suficiente onde o resultado é conhecido, para posterior aplicação a dados onde o resultado não é conhecido, é denominado aprendizado supervisionado. Outra conexão importante entre ciência de dados e estatística está na área de detecção de anomalias, onde diagnósticos de regressão originalmente destinados à análise de dados e melhoria do modelo de regressão podem ser usados para detectar registros incomuns.

5.2. Linear Model¶

O modelo de regressão linear simples fornece um modelo da relação entre a magnitude de uma variável e a de uma segunda por exemplo, à medida que X aumenta, Y também aumenta, da mesma forma, conforme X aumenta, Y diminui. A correlação é outra forma de medir como duas variáveis estão relacionadas. A diferença é que enquanto a correlação mede a força de uma associação entre duas variáveis, a regressão quantifica a natureza da relação.

Objetivo do modelo de regressão linear é estuda relacionamento entre as variáveis.

Observa-se que (ALEXANDRE.G, 2017) reforça que estabelecida a relação linear entre Y e X, o próximo passo é estimar a função de regressão com base em informações da amostra, priorizando a maneira mais exata e eficiente possível. O método mais utilizado é o de mínimos quadrados ordinários, dada sua relativa simplicidade operacional e resultados que, satisfeitas algumas condições, são os mais acurados (exatos) e eficientes (variância mínima) existentes.

Do mesmo modo, o método de mínimos quadrados é uma das ferramentas mais importantes da estatística moderna e sua descoberta envolveu uma das disputas mais famosas da história da estatística. Adrien Marie Legendre foi o primeiro a publicar a técnica, em 1805, em seu livro Nouvelles Méthodes pour la Determination des Orbites des Comètes, mas Johann Carl Friedrich Gauss clamou a descoberta da técnica que dizia utilizar desde 1795, também em problemas de Astronomia e Física, embora publicada apenas em 1809 (ALEXANDRE.G, 2017).

5.2.1. 1st degree function¶

Este tipo de função apresenta um grande número de aplicações.

Uma função é chamada de função de 1° grau (ou função afim) e sua sentença for dada por y = ax + b , sendo a e b constantes reais com a diferente de zero.

Sendo assim, verifica-se que o gráfico de uma função do 1° grau é uma reta, ou seja, é uma reta inclinada em relação ao eixo das abscissas (eixo horizontal). Assim, o gráfico pode ser obtido por meio de dois pontos distintos (pois dois pontos distintos determinam um reta).

A constante b é chamada de coeficiente linear e representa, no gráfico, a ordenada do ponto de interseção da reta com eixo de y.

A justificativa para essa afirmação é feita lembrando que, no ponto de interseção do gráfico da função com eixo y, a abscissa x vale zero; assim, o ponto de interseção é da forma (0,y), e, como ele pertence também ao gráfico da função, podemos substituir x por 0 na função chegamos a:

$$ y = a * 0 + b => y = b $$

Portanto, o ponto de interseção do gráfico com eixo y tem ordenda b.

A constante a é chamada de coeficiente angular e representa a variação de y correspondente a um aumento do valor de x igual a 1, aumento considerado a partir de qualquer ponto da reta; quando a > 0, o gráfico corresponde a uma função crescente, e, quando a < 0, o gráfico corresponde a uma função decrescente. A figura a seguir ilustra os detalhes desse conceito.

Coeficiente linear e angular de uma reta

image.png

Source: (PEDRO.A; SAMUEL.H; WILTON DE O., 2016)

Assim temos:

  • x é variável independente (entradas de valores);
  • y e variável depedente (saída de valores);
  • a é coeficiente angular da reta ( número real diferente de zero )
  • b é coeficiente linear (número real);

Vejam os exemplos a seguir, segundo (CHRISTIANE MAZUR, 2022) destaca:

  • Coeficiente angular de y = 8.x - 3, ou y = 8.x + (-3), é 8 seu coeficiente linear é -3. Trata-se de uma reta inclinada para direta (pois seu coeficiente angular é número real positivo) e que cruza o eixto vertical em y = -3.

  • Coeficiente angular de y = -7.x + 2, é -7 seu coeficiente linear é 2. Trata-se de uma reta inclinada para esquerda (pois seu coeficiente angular é número real negativo) e que cruza o eixto vertical em y = 2.

  • Coeficiente angular de y = -21.56x, ou y = -21.56.x + 0, é -21.56 seu coeficiente linear é 0. Trata-se de uma reta inclinada para esquerda (pois seu coeficiente angular é número real negativo) e que cruza o eixto vertical em y = 0.

É importante frisar este conceito, na "fórmula" y = 2.x - 5, x representa a variável independente (entradas de valores) e y representa a variável dependente (saída de valores). Por exemplo, se pensamos em x iguala 327, a "fórmula" y = 2.x - 5 retorna y igual a 649, pois 2 vezes 327 menos 5 resulta em 649.

A regra estabelecida em y = 2.x - 5 é a seguinte: dê um valor para x, multiplique-o por 2, subtraia 5 e insira esse resultado em y.

O coeficiente angular a de uma função do 1º grau não é um ponto da reta que representa tal função; esse coeficiente está ligado à inclinação da reta que representa a função.

Em poucas palavras, domínio é o conjunto dos elementos de A que possuem um correspondente em B dados pela relação.

Assim, temos os cálculos resumido proposto por (ALEXENDRE.G, 2017) do modelo linear:

image.png

Source: (ALEXANDRE.G, 2017)

Recomendo consultar os livros com prioridade que abordem os conceitos referentes a análise de regresão; Cálculo: Funções de uma e várias variáveis 3E, Econometria conceitos e aplicações, Hands-on: Machine Learning with Scikit-Learn & TensorFlow, 2nd ed

Análise de Regressão das Vendas na América do Norte, Europa, Japão e Resto do Mundo¶

  • Por que coletar uma amostra?

    Principalmente porque é mais fácil e mais acessível.

Imagine que você quer saber o que todo o país pensa... você não pode perguntar a milhões de pessoas, então ao invés disso você pergunta talvez a 1.000 pessoas.

Há uma boa citação (possivelmente de Samuel Johnson):

"Você não precisa comer o animal inteiro para saber que a carne é dura."

Essa é a ideia básica da amostragem, e é por isso que analisaremos os dados entre percentile 5% e 95% das vendas de video games nas seções subsequentes.

In [25]:
# Select 5th to 95th percentile sales for regression analysis
sales=df_dropna[(df_dropna['year'] >= 1996) & (df_dropna['year'] <= 2015)]
In [26]:
# Display the regression analysis graphs
#North America 
graphic.plot_scatter(
    sales,
    x = 'na_sales',
    y = 'global_sales',
    color ='genre',
    title ='<b>Relação das Vendas na América do Norte e Total de Vendas Mundiais por Gênero de 1996-2015</b>',
    x_title='Número de vendas  na América do Norte (em milhões)',
    y_title='Estimativa do Total de Vendas na América do Norte (em milhões)',
    template= 'xgridoff'
)
# Europe
graphic.plot_scatter(
    sales,
    x = 'eu_sales',
    y = 'global_sales',
    color ='genre',
    title ='<b>Relação das Vendas na Europa e Total de Vendas Mundiais por Gênero de 1996-2015</b>',
    x_title='Número de vendas na Europa (em milhões)',
    y_title='Estimativa do Total de Vendas Europa (em milhões)',
    template= 'xgridoff')

# Japan
graphic.plot_scatter(
    sales,
    x = 'jp_sales',
    y = 'global_sales',
    color ='genre',
    title ='<b>Relação das Vendas no Japão e Total de Vendas Mundiais por Gênero de 1996-2015</b>',
    x_title='Número de vendas no Japão (em milhões)',
    y_title='Estimativa do Total de Vendas Europa (em milhões)',
    template= 'xgridoff')

# Rest of the world
graphic.plot_scatter(
    sales,
    x = 'other_sales',
    y = 'global_sales',
    color ='genre',
    title ='<b>Relação das Vendas no Resto do Mundo e Total de Vendas Mundiais por Gênero de 1996-2015</b>',
    x_title='Número de vendas no Resto do Mundo (em milhões)',
    y_title='Estimativa do Total de Vendas Resto do Mundo (em milhões)',
    template= 'xgridoff'
)

Indicadores¶

A estimativa do coeficiente angular sugere que, para cada aumento de (1 centena de milhar) ou unitário na vendas pelo gênero sports a média (a.x = 1) haja um incremento médio e constante de vendas superior a 100.000 cópias por este gênero (y = 1.9380 * 100.000). O intercepto negativo não possui interpretação econômica, pois indicaria um venda esperada negativa caso a média de vendas do gênero Sports fosse igual a 0.0. Este ocorre porque os valores observados na amostra limita-sem basicamente as vendas entre 1996 a 2015, não sendo prudente prever o que ocorreria com vendas a este gênero igual a 0.

Além disso, R² mostra 93%, isto significa que a variável independente Vendas na América do Norte e Total Vendas Mundiais explicam, conjuntamente, quase a totalidade (93%) da variabilidade observada para vendas no qual gênero é sports. Os demais 7% seriam determinados por outros fatores interligado ao jogo como; plataforma de publicação, editora de lançamento e assim por adiante, ou até , mesmo por diferenças entre os tipos sports.

Portanto, com base em algumas das análises estatísticas demostrada acima, podemos descobrir alguns insights relevantes sobre as vendas por gênero. Vejamos outro exemplo:

image.png

Assim, a princípio, o coeficiente angular sugeriria que, para cada aumento de 1 centena de milhar, ou melhor, (para cada aumento de 100.000 cópias de vendas) pelo gênero role-playing, haveria um acréscimo médio 2.38871 no total de vendas mundiais por este gênero. Em outras palavras, o rendimento esperado das vendas pelo gênero role-playing seria 0.0672365 para cada venda superior a 100.000 cópias, espera-se um acréscimo de 2.38871 (em milhões) no rendimento total das vendas deste gênero.

A justificativa para essa afirmação é, mantendo todos os outros recursos fixos, um aumento de 1 centena de milhar em unidade neste gênero que jogodores preferem está associado a um aumento de R$ 2.38 (em milhões) no valor total das vendas mundiais por este gênero por ano. Além de que, tem R² de 89% da variabilidade das vendas pelo gênero role-playing, é explicada pelo total de vendas mundiais que jogadores adquire comprando jogos relacionado ao gênero role-playing. Os demais 11% seriam determinados por outros fatores interligado ao jogo como; plataforma de publicação, editora de lançamento e assim por adiante, ou até , mesmo por diferenças entre os tipos role-playing.

Da mesma forma, com você já conhece o ritmo, você interpretar as estimativas dos coeficientes das vendas para os restantes continentes.

Alem do mais, a partir dessa análise, pode-se derivar uma medida simples de que total de vendas mundiais por gênero têm uma tendência linear positiva em termos de rendimento anual.

6. Z-Score¶

Em poucas palavras, Z-score é a diferença entre um valor e a média, dividida pelo desvio padrão.

  • Medida de distância da média (por exemplo, um z-score igual a 2 significa que o valor está a 2 desvios da média).

  • Um z-score acima de 3 ou abaixo de -3 é considerado um valor extremo (outlier). Esse é um dos critérios clássico para encontrar outlier, mas não significa que o valor seja um erro ou que não deveria fazer parte dos dados. Dessa forma, isso significa que deve ser examinado. Usar medidas baseadas em rdenamento podem ser mais adequadas para dados com muitos valores extremos.

Em uma distribuição normal conforme a figura a seguir ilustra, mostra que aproximadamente 68% dos dados estão dentro de um desvio padrão da média, e 95% estão dentro de dois desvios-padrão e assim sucessivamente.

Normal curve

image.png

Source: (Andrew.B; Peter.B; Peter.G, 2020)

Z-score apresentará sempre um dos 3 valores:

  • Positivo: valores acima da média
  • Negativo: valores abaixo da média
  • Zero: valores iguais a média

Além disso, utilizando o Z-score você saberá onde está o valor na sua distribuição, ou seja, o z-score determina a distância do z-score entre diferentes amostras. O código a seguir mostra cálculo de Z-score e a distribuição de probabilidade.

Logo, vamos modelar a função Z-score para quantificar os tipos de gênero do jogo e a plataforma de publicação do jogo, com objetivo de investigar quais seriam as vendas de ambos, que estão acima ou abaixo da média.

Z-score das Vendas na América do Norte, Europa, Japão e Resto no Mundo por Gênero do jogo¶

In [27]:
# Selecting sales in North America, Europe, Japan and the rest of the world to calculate the z-score
z_na_sales=stats_calc.calc_zscore(df= sales, categorical="genre",numeric="na_sales")
z_eu_sales=stats_calc.calc_zscore(df= sales, categorical="genre", numeric="eu_sales")
z_jp_sales=stats_calc.calc_zscore(df= sales, categorical="genre", numeric="jp_sales")
z_other_sales=stats_calc.calc_zscore(df= sales, categorical="genre", numeric="other_sales")

# Display the graphics
graphic.plot_calc_zscore(
    df = z_na_sales,
    categorical= "genre",
    title_bar="<b>Gêneros com vendas acima e abaixo da média na América do Norte (em milhões) de 1996-2015</b>",
    y_title_bar="Genre",
    title_hist ="<b>Quantidade de gêneros na escala Z score</b>",
    title_dist ="<b>Distribuição de probabilidade</b>",
    template="gridon"
)
graphic.plot_calc_zscore(
    df = z_eu_sales,
    categorical= "genre",
    title_bar="<b>Gêneros com vendas acima e abaixo da média na Europa (em milhões) de 1996-2015</b>",
    y_title_bar="Genre",
    title_hist ="<b>Quantidade de gêneros na escala Z score</b>",
    title_dist ="<b>Distribuição de probabilidade</b>",
    template="gridon"
)
graphic.plot_calc_zscore(
    df = z_jp_sales,
    categorical= "genre",
    title_bar="<b>Gêneros com vendas acima e abaixo da média no Japão (em milhões) de 1996-2015</b>",
    y_title_bar="Genre",
    title_hist ="<b>Quantidade de gêneros na escala Z score</b>",
    title_dist ="<b>Distribuição de probabilidade</b>",
    template="gridon"
)
graphic.plot_calc_zscore(
    df = z_other_sales,
    categorical= "genre",
    title_bar="<b>Gêneros com vendas acima e abaixo da média no Resto do Mundo (em milhões) de 1996-2015</b>",
    y_title_bar="Genre",
    title_hist ="<b>Quantidade de gêneros na escala Z score</b>",
    title_dist ="<b>Distribuição de probabilidade</b>",
    template="gridon"
)

Indicadores¶

Partindo do pressuposto dessa análise, os gêneros com vendas acima e abaixo da média na América do Norte (em milhões) são : action, sports, shooter, misc e racing e distribuição de probabilidade situa-se -1 a 1 desvio padrão da média mediante a figura a seguir, com aproxidamente 68% dos gêneros, entenda-se que a concentração máxima das vendas por estes gêneros estão nesse intervalo, assim como, o histrograma e distplot complementar a análise da distribuição normal.

image.png

Source: ( Ismar Frango )

De acordo com esses resultados alcançáveis das análises referenciadas anteriormente, pode-se afirmar partindo do pressuposto aos gêneros dos jogos como; action, shorts e misc estão acima da média de vendas em todos os continentes. Da mesma forma, esta análise deve seguir o mesmo para as plataformas de publicação do jogo, isso pode ser visto no desenvolvimento nas seções subquentes. Antes disso, vamos ver a distribuição de frequências relativas de cada continente ajustando a análise do cálculo Z Score nas seções subsequentes.

Diante disso, recomendo consulta o pdf do professor Ismar Franco sobre As distribuição normais para entender mais sobre o assunto exposto.


Distribuição de frequências sobre total de vendas por gênero na América do Norte, Europa, Japão e Resto Mundo¶

In [28]:
# Capturing the relative and total frequencies of North America, Europe, Japan and Rest of World sales
freq_na = stats_calc.relative_and_cumulative(sales,'genre','na_sales')
freq_eu =stats_calc.relative_and_cumulative(sales,'genre','eu_sales')
freq_jp =stats_calc.relative_and_cumulative(sales,'genre','jp_sales')
freq_other= stats_calc.relative_and_cumulative(sales,'genre','other_sales')

# Display the graphics
graphic.plot_bar_with_line(
                   df=freq_na,
                   categorical="genre",
                   percent="fr",
                   sales_amount="na_sales",
                   title="<b>Frequência relativa de vendas na América do Norte por Gênero de 1996-2015</b>",
                   template="xgridoff"
)
graphic.plot_bar_with_line(
                   df=freq_eu,
                   categorical="genre",
                   percent="fr",
                   sales_amount="eu_sales",
                   title="<b>Frequência relativa de vendas na Europa por Gênero de 1996-2015</b>",
                   template="xgridoff"
)
graphic.plot_bar_with_line(
                   df=freq_jp,
                   categorical="genre",
                   percent="fr",
                   sales_amount="jp_sales",
                   title="<b>Frequência relativa de vendas no Japão por Gênero de 1996-2015</b>",
                   template="xgridoff"
)
graphic.plot_bar_with_line(
                   df=freq_other,
                   categorical="genre",
                   percent="fr",
                   sales_amount="other_sales",
                   title="<b>Frequência relativa de vendas no Resto do Mundo por Gênero de 1996-2015</b>",
                   template="xgridoff"
)

Z-score das Vendas na Europa, Japão e Resto do Mundo por plataforma de publicação do jogo¶

In [29]:
# Selecting sales in North America, Europe, Japan and the rest of the world to calculate the z-score
z_na_sales_p=stats_calc.calc_zscore(df= sales, categorical="platform", numeric="na_sales")
z_eu_sales_p=stats_calc.calc_zscore(df= sales, categorical="platform", numeric="eu_sales")
z_jp_sales_p=stats_calc.calc_zscore(df= sales, categorical="platform", numeric="jp_sales")
z_other_sales_p=stats_calc.calc_zscore(df= sales, categorical="platform", numeric="other_sales")

# Display the graphics
graphic.plot_calc_zscore(
    df = z_na_sales_p,
    categorical= "platform",
    title_bar="<b>Platforms com vendas acima e abaixo da média na América do Norte (em milhões) de 1996-2015</b>",
    y_title_bar="Platforms",
    title_hist ="<b>Quantidade de platforms na escala Z score</b>",
    title_dist ="<b>Distribuição de probabilidade</b>",
    template="gridon"
)
graphic.plot_calc_zscore(
    df = z_eu_sales_p,
    categorical= "platform",
    title_bar="<b>Platforms com vendas acima e abaixo da média na Europa (em milhões) de 1996-2015",
    y_title_bar="Platforms",
    title_hist ="<b>Quantidade de platforms na escala Z score",
    title_dist ="<b>Distribuição de probabilidade",
    template="gridon"
)
graphic.plot_calc_zscore(
    df = z_jp_sales_p,
    categorical= "platform",
    title_bar="<b>Platforms com vendas acima e abaixo da média no Japão (em milhões) de 1996-2015</b>",
    y_title_bar="Plartforms",
    title_hist ="<b>Quantidade de platforms na escala Z score</b>",
    title_dist ="<b>Distribuição de probabilidade</b>",
    template="gridon"
)
graphic.plot_calc_zscore(
df = z_other_sales_p,
    categorical= "platform",
    title_bar="<b>Platforms com vendas acima e abaixo da média no Resto do Mundo (em milhões) de 1996-2015</b>",
    y_title_bar="Platforms",
    title_hist ="<b>Quantidade de platforms na escala Z score</b>",
    title_dist ="<b>Distribuição de probabilidade</b>",
    template="gridon"
)

7. Pareto Principle (“80/20 or 20/80 rule”)¶

O gráfico de Pareto visa entender a relação ação-benefício, ou seja, priorizar ações que possam trazer os melhores resultados. O princípio de Pareto ( regra “80/20 ou 20/80”) em homenagem ao economista Vilfredo Pareto, especifica que 80% das consequências vêm de 20% das causas, afirmando uma relação desigual entre entradas e saídas. Em poucas palavras, é uma teoria que sustenta que 80% da saída de uma determinada situação ou sistema é determinada por 20% da entrada.

Em outras palavras, a famosa fórmula criada em 1906 por um economista italiano, o princípio de Pareto (ou “regra 80/20”) estipula que, em diversas áreas, 80% dos resultados dependem de apenas 20% das causas. Visto que para determinar o que consiste nos 20% é preciso priorizar, a regra pode ser aplicada quando se trata de tarefas cotidianas, afetando positivamente a produtividade.

Conforme observamos anteriormente, vamos modelar a função da regra de Pareto para quantificar quais são as principais platforms que geram o maior engajmamento de vendas, no qual objetivo é compreender análise:"causa e efeito" no impacto dos resultados positivos no plano estratégico das vendas de video games.

Pergunta de negócio?

  • Quais são as plataformas de publicação do jogo que produz a maior causa no engajamento de vendas na América do Norte, Europa, Japão e Resto do Mundo?

Importante ressalta análise do gráfico de pareto, a linha é construída de forma ordenada lado esquerdo ao qual apuramos (temos) as principais causas do problema e do lado direito da linha contamos as causas menos relevantes

In [30]:
# Function call pareto 
pareto_na=stats_calc.relative_and_cumulative(df = sales,categorical= "platform",numeric ="na_sales")
pareto_eu=stats_calc.relative_and_cumulative(df = sales,categorical= "platform",numeric ="eu_sales") 
pareto_jp=stats_calc.relative_and_cumulative(df = sales,categorical= "platform",numeric ="jp_sales")
pareto_ot=stats_calc.relative_and_cumulative(df = sales,categorical= "platform",numeric ="other_sales")

# Display the graphics
graphic.plot_pareto(
    df= pareto_na,
    categorical= "platform",
    numeric= "na_sales",
    title="<b>Principais platforms com engajamento de Vendas na América do Norte de 1996-2015</b>",
    template ="xgridoff"
)
graphic.plot_pareto(
    df= pareto_eu,
    categorical= "platform",
    numeric= "eu_sales",
    title="<b>Principais platforms com engajamento de Vendas Europa de 1996-2015</b>",
    template ="xgridoff"
)
graphic.plot_pareto(
    df= pareto_jp,
    categorical= "platform",
    numeric= "jp_sales",
    title="<b>Principais platforms com engajamento de Vendas no Japão de 1996-2015</b>",
    template ="xgridoff"
)
graphic.plot_pareto(
    df= pareto_ot,
    categorical= "platform",
    numeric= "other_sales",
    title="<b>Principais platforms com engajamento de Vendas Restdo do Mundo de 1996-2015</b>",
    template ="xgridoff"
)

Indicadores¶

A análise gráfica apresentada sobe a regra 20/80 permitem derivar algumas importantes propriedades dos resultados atingidos. Por exemplo, vamos referência as vendas na América do Norte conforme mostra a figura a seguir, quais são as principais plataformas de publicação do jogo que possui um forte engajamento de vendas.

Sabemos que o princípio de Pareto estabeleceu as principais plataformas que afetam as vendas, apresentadas pelas plataformas: X360, PS2, PS3, Wii, DS (de total acumulado de 594,33 milhões de vendas), portanto essas plataformas respondem principalmente por até 62,13% das vendas na América do Norte. Isso significa que, desse ponto de vista, se dermos mais ênfase ao planejamento de estratégia de vendas, podemos começar por essas plataformas, que têm um efeito de alavancagem de 62,13% nas vendas por platformas. Porém, cabe aos gestores das áreas de negócio investigar e tomar as decisões necessárias.

image.png

Assim sendo, análise da regra de Pareto deve seguir tanto para Europa, Japão e no Resto do Mundo da mesma forma citada anteriormente em cima do exemplo analisado.


8. Gamma Distribution¶

Com base no gráfico de Pareto explorado anteriormente, eventualmente queremos uma forma ou alternativa de prevê se este comportamento das vendas pelas as principais platforms vai ter uma inclinação positiva ou negativa ao longo do tempo, ou seja, como devemos ver essa relação de previsão dessas inclinações. No entato, sob mesmo ponto de vista, a distribuição gamma é capaz de modelar esse método de inclinação das vendas.

Na teoria das probabilidades, a distribuição gamma é uma família de dois parâmetros de distribuições contínuas de probabilidades. A distribuição exponencial, a distribuição Erlang e a distribuição chi-squared são casos especiais da distribuição gamma.

Da mesma forma, para estimar os parâmetros de uma distribuição gamma a partir de um conjunto de observações, podemos usar o método da máxima verossimilhança. Isso envolve encontrar os valores dos parâmetros que maximizam a probabilidade das observações dada a distribuição gamma.

Uma maneira de fazer isso é usar a função scipy.stats.gamma.fit, que estima os parâmetros de uma distribuição gamma maximizando a probabilidade das observações. Isso significa que para estimar os parâmetros de uma distribuição gamma a partir de um conjunto de observações, podemos usar o método da máxima verossimilhança. Isso envolve encontrar os valores dos parâmetros que maximizam a probabilidade das observações dada a distribuição gamma.

Dessa maneira, vamos modelar a função de probabilidade do total de vendas ao longo do tempo com a distribuição gamma.

In [31]:
# Capturing the gamma distribution calculations maximizes the probability of observations.
gamma_na = stats_calc.dist_gamma(sales, 'platform','na_sales')
gamma_eu = stats_calc.dist_gamma(sales, 'platform','eu_sales')
gamma_jp = stats_calc.dist_gamma(sales, 'platform','jp_sales')
gamma_other = stats_calc.dist_gamma(sales, 'platform','other_sales')

# Grouping total sales by year and platform
d = sales.groupby(['year','platform'])['na_sales','eu_sales','jp_sales','other_sales'].sum().reset_index()

# Display the graphics
graphic.plot_dist_gamma(df=gamma_na,
                title='<b>Comparison of Gamma Distribution vs Total North American Sales by Platform from 1996-2015<b>',
                template='ygridoff'
)
graphic.plot_dist_gamma(df=gamma_eu,
                title='<b>Comparison of Gamma Distribution vs Total European Sales by Platform from 1996-2015<b>',
                template='ygridoff'
)
graphic.plot_dist_gamma(df=gamma_jp,
                title='<b>Comparison of Gamma Distribution vs Total Sales in Japan by Platform from 1996-2015<b>',
                template='ygridoff'
)
graphic.plot_dist_gamma(df=gamma_other,
                title='<b>Comparison of Gamma Distribution vs Total Rest of World Sales by Platform from 1996-2015<b>',
                template='ygridoff'
)
graphic.plot_joy(d,
         'year',
         'Estimativa de Densidade por YEAR',
         'na_sales', 'eu_sales', 'jp_sales', 'other_sales')
graphic.plot_joy(d,
         'platform',
         'Estimativa de Densidade por Platform de 1996-2015',
         'na_sales', 'eu_sales', 'jp_sales', 'other_sales')
No description has been provided for this image
No description has been provided for this image

Indicadores¶

Os resultados sugerem, portanto, as vendas por plataforma devem aumenta em ambos os continentes entorno de 10%, com passo largo de previsão, exceto para Resto do Mundo. Além disso, partido desse pressuposto, é importante lembra que as previsões de vendas por plataformas deverá aumenta significativamente, próximo do intervalo de 0 a 0.2%, onde as vendas têm uma forte concentração máxima.

Observando a elasticidade por continente, na América do Norte e na Erupa, o consumo de vendas é muito maior pelas plataformas (PS, PS, PS3, PS4, WII) acima de 50M. Por outro lado, no Japão e Resto do mundo, as vendas são mais concentradas abaixo de 30M, assim como, se observamos de perto as plataformas WIU e PS2 apresentaram o mesmo padrão de vendas.


9. Temporal analysis¶

Neste capítulo, examinaremos uma visão geral da evolução das vendas de video games na América do Norte, Europa, Japão e Resto do Mundo.

In [32]:
# Aggregating total sales by year
ts_sales = df_dropna.groupby(['year'])['na_sales','eu_sales','jp_sales','other_sales'].sum().reset_index()
ts_sales= ts_sales.set_index('year')

# Display the graphics
graphic.ts_series(
          ts_sales,
          'na_sales','eu_sales','jp_sales','other_sales',
          title="<b>Sazonalidade anual e as tendências de longo prazo das vendas de video games</b>",
          template="xgridoff"
)

Indicadores Sazonalidade¶

Os resultados apresentados mostra que as vendas de video games iniciaram com as mais altas no percentile 5th cuja year é 1996, onde conseguimos ver o alavancamento das vendas na série temporal. No entanto, perceba-se que, as vendas cresceram mais rapidamente durante year 2003 que respresenta Q1 cuja o valor 25% até percentile 95% cuja year é 2015, durante esse período da série temporal eram significativamente as vendas mais altas América do norte, Europa, Japão e Resto do Mundo. Em contrapartida, as vendas começaram a cair logo em 2016 e manteve sua queda aos years subsequentes em uma distribuição aproxidamente perto de uma uniforme nesse período de tempo.

Indicadores Densidade¶

A forma do gráfico de densidade de cada continente nos fornece informações sobre as características do total de vendas ao longo do anos.

Em primeira análise, a distribuição das vendas ao longo do anos, por exemplo, as vendas na América do Norte e Europa, temos as caudas da distribuição de frequência muita mais longas, ou melhor, mais esticada ao longo de todo período (principalmente da América do Norte), isso representa que não temos uma concentração (padrão) de vendas específicas, melhor dizendo, na prática as vendas de video games estão sendo vendidas durante todo ano com diferente níveis de compras, ou seja, isto é as vendas na América e na Europa está nós informandos.

Novamente, pegamos o exemplo das vendas no Japão e Resto do Mundo, isso significa que temos uma concentração muito maior de vendas (principalmente no Resto do Mundo), mas as vendas são inferiores a 83 milhões, ou seja, as vendas são menores e mais concentradas dado essa afirmação!

Em poucas palavras, as vendas na América e na Europa é maior mas, é mais espalhadas, isso confirma vários níveis de vendas ao longo do anos, isto significa a distribuição dos dados. Por outro lado, as vendas no Japão e Resto do Mundo é menor e são mais concetradas.


Da mesma forma, fizemos para total das vendas, temos potencial de analisar um intervalo de confiança de 95% das vendas por continentes. A partir da média que será observada, assim como, poderemos inferir sobre os valores dentro do intervalo de confiança 95% das médias anaul das vendas de video, isso significa que se escolhermos da população 100 vendas de forma aleatória, 95% estarão nesse intervalo.

9.1. Confidence interval (CI) for Arithmetic Mean for Video Game Sales Over Time¶

O intervalo de confiança é uma técnica simples de inferência que permite estabelecer um intervalo com probabilidade γ de conter um parâmetro populacional. Por exemplo, a especificação de um intervalo com confiança de 95% para Y significaria que este, em repetidas amostras de tamanho n, conterá o real parâmetro da população em γ em 95% das situações.

Por exemplo, vamos supor que o tamanho da amostra é dado e desejamos encontra um intervalo que aumente as chances de capturamos a verdadeira média de uma poulação. Assim como, na prática nunca sabemos a média da população, temos exatamente informações das amostras, ou seja, nós esperamos dado um intervalo de confiança (o valor em %) das médias das amostras de uma população, irão produzir um intervalo de confiança que inclua a média da população.

Em outras palavras, a confiança significa que 95% da vezes a média populacional esteja dentro intervalo construído a partir das amostras aleatórias populacional.Intervalo maiores aumentamos acurácia, visto que, diminui a precisão. Na teoria o intervalo perfeito é +infinito e -infinito, ou seja, concerteza capturamos o verdadeiro parâmetro de interesse, mas a precisão é nenhum. É importante ressaltar que intervalo de confiança é construído para média populacional para parâmetro populacional, caso não seja a média.


9.2. Seasonality Patterns¶

Sazonalidade é qualquer padrão que se repita ao longo de intervalos regulares. Ao contrário de outros ruídos que ocorrem nos dados, a sazonalidade pode ser prevista.

Portanto, existe uma forte relação entre o padrão sazonal e a frequência da série.

Quando a sazonalidade existe nos dados da série temporal, podemos classificá-la em uma das seguintes categorias:

  • Padrão sazonal único: sempre que houver apenas um padrão sazonal dominante na série.
  • Padrão sazonal múltiplo: se houver mais de um padrão sazonal dominante na série.

Normalmente, é mais provável que vários padrões sazonais ocorram sempre que a série tiver uma frequência alta, assim temos: (exemplo, diariamente, a cada hora, meia hora e assim por diante), pois há mais opções para agregar a série a uma frequência mais baixa.

Um exemplo típico de sazonalidade múltipla é a demanda horária de eletricidade, que pode ter vários padrões sazonais, pois a demanda é derivada da hora do dia, do dia da semana ou dos padrões anuais, como clima ou quantidade de luz do dia durante todo o dia.

Por outro lado, quando a frequência da série é mais baixa por exemplo ( mensalmente, trimestralmente, etc.), é mais provável que tenha apenas um padrão sazonal dominante em oposição a uma série de alta frequência, pois há menos opções de agregação para outro tipo de frequências.

A implementação da função a seguir cria uma versão agrupada, com média calculada e desvio padrão e também calcular um intervalo de confiança de 95%

In [33]:
# Applies the log + 1 transform
log1p = transformer.cols_to_log1p(df_dropna,df_dropna.iloc[:,6:12])

# Function call CI 95%
ts_na = stats_calc.ci_95(log1p,'year','log1p_na_sales') # log transformation + 1
ts_eu = stats_calc.ci_95(log1p,'year','log1p_eu_sales') 
ts_jp = stats_calc.ci_95(log1p,'year','log1p_jp_sales')
ts_other = stats_calc.ci_95(log1p,'year','log1p_other_sales') 

# Time series graph function call
graphic.plot_ci(df=ts_na,
        numeric="year", 
        title='<b>Log-smoothed annual average and long-term sales trends in North America</b>',
        template= 'xgridoff'
)
graphic.plot_ci(df=ts_eu,
        numeric="year", 
        title='<b>Log-smoothed annual average and long-term sales trends in Europe</b>',
        template= 'xgridoff'
)

graphic.plot_ci(df=ts_jp,
        numeric="year", 
        title='<b>Log-smoothed annual average and long-term sales trends in Japan</b>',
        template= 'xgridoff'
)
graphic.plot_ci(df=ts_other,
        numeric="year", 
        title='<b>Log-smoothed annual average and long-term trends of Rest of World sales</b>',
        template= 'xgridoff'
)

Indicadores¶

Padrões sazonais ao longo dos anos provavelmente não conseguiremos capturar bons padrões de vendas. Assim como, a frêquencia de tempo tem uma relação direta com padrão, é mais complexo descobrir padrões nos dados.

Os resultados apresentados a partir da média observada na amostra aplicando o CI aos valores esperados da média anual para ambos os continentes refere-se a uma estimativa para um parâmetro populacional, isso significa que ambos os continentes capturou um CI de 95% para médias anuais. No entanto, se observamos a variaçao do tempo onde CI está mais compactado partir do percentile 5th, cuja início é year 1996 até 2016, pois o CI está muito próximo da médias de vendas anuais para ambos os continentes.

Vejamos o exemplo: as médias anuais de vendas na América do Norte conforme ilustra a figura a seguir, mostra CI 95% que vai de 0.56 a 0.23. Isso significa que se escolhermos da população 100 vendas videos em 1992 de forma aleatória, 95% das médias de vendas na América do Norte estarão nesse intervalo .

image.png

9.3. Evolution of the top 5 most requested games by Genre¶

In [36]:
# Group by year and genre 
top5_global_sales = df_dropna.groupby(['year','name'])['global_sales'].sum().reset_index()

# Construction of the chart
gs_raceplot = barplot(df=top5_global_sales ,  
                      item_column="name", 
                      value_column='global_sales', 
                      time_column='year',
                      top_entries = 5)
# Display the graphics
gs_raceplot.plot(title='Evolução Top 5 jogos mais solicitados por Gênero', item_label = 'Genres',value_label = 'Total de vendas ( em milhões )', date_format='%Y',
                 time_label = 'Ano: ', frame_duration = 1000)

9.4. Global sales by genres and platform¶

In [35]:
#g=df_dropna.groupby(['genre']).agg({'global_sales': 'sum'}).stb.subtotal().reset_index().rename(columns = {'index':'genre'})
#p=df_dropna.groupby(['platform']).agg({'global_sales': 'sum'}).stb.subtotal().reset_index().rename(columns = {'index':'platform'})

# Plot
graphic.plot_pie(df_dropna,
                 "genre",
                 "platform",
                 "global_sales",
                 "<b> Total de Vendas de Video Games Mundiais de 1980-2020<b>",
                 "<b>Total de vendas por Genre</b>",
                 "<b>Total de vendas por Platform</b>"
)
fig = px.treemap(df_dropna, path=[px.Constant("Total de Vendas Mundiais"), 'genre', 'platform'], values="global_sales",
                      color= 'year',
                      color_continuous_scale='cividis')
fig.update_traces(texttemplate='%{label} <br> R$: %{value: text}M <br> ')
fig.update_layout(title_text= "<b> Total de Vendas de Video Games Mundiais<b>",
                        titlefont = {'size': 20, 'family': 'Serif'},
                        font_color="black",
                        title_x=0.5,
                        height=700,
                        width=950,
                        margin = dict(t=50, l=25, r=20, b=25))
fig.show()

10. Conclusion¶

ML é uma aplicação de Inteligência Artificial (AI) que auxilia na previsão de resultados futuros. ML está sendo usado em muitos setores, desde a detecção de fraudes até a automação de processos de negócios. ML oferece às empresas uma visão diferente de seus padrões operacionais e tendências no comportamento dos clientes.

Acresentando-se que, AI refere-se ao uso de modelos estatístico ou matemáticos em aplicações específicas para predição dos resultados, buscando sempre a máxima acurácia e robustez possíveis (por meio da busca do melhor modelo estatístico e da separação da amostra em duas parte, uma treina e outra para validar o modelo.

Além do mais, ML tem muitas aplicações potenciais e está crescendo rapidamente. O crescimento exponencial dos dados contribui para a expansão e uso do dos algoritmos de ML. Dessa forma, ML não apenas pode ser aplicado a aplicativos voltados para o cliente, como recomendação de produtos, atendimento ao cliente e previsões, mas também pode ser usado por equipes internas para acelerar processos e tarefas demoradas.

Como resultado, o desenvolvimento desse projeto se apresentou de forma clara e com eficiência quanto as técnicas de mineração de dados e análise econométrica para uso da sua aplicabilidade. Assim, ML também pode ser usada como análise de dados, conforme o projeto se apresentou durante todo seu progesso ao longo do seu desenvolvimento, pois ML tem suas raízes profundas em estatística e matemática, essa duas fontes é o conceitos-chave, no melhor sentido da palavra guarda-chuva no desenvolvimento da AI que vemos hoje em grandes aplicações.

Por meio de todo esse progesso, foram abordados os conceitos, planejamentos, compreensão do problema de negócio, definição do problema de negócio, centralização de dados, metodologia definida para preparação de dados, ferramentas eficazes para preparação e visualização de dados.


11. Apêndice¶

O desenvolvimento desse apêndice é composto parte do livro Practical Statistics for Data Scientists: 50+ Essential Concepts Using R and Python, 1E e livro de Econometria conceitos e aplicações o qual você pode conferir na seções subquentes.

Named Constants¶

  • CONCEITO: Uma constante nomeada é um nome que representa um valor que não pode ser alterado durante a execução do programa

Termos-chave para Tipos de Dados¶

Númerico: Dados que são expressos em uma escala numérica.

Contínuos: Dados que podem assumir qualquer valor em um intervalo.

  • Sinônimos: intervalo, flutuação, numérico

Discretos: Dados que podem assumir apenas valores inteiros, como contagens.

  • Sinônimos: inteiro, contagem

Categóricos: Dados que podem assumir apenas um conjunto específico de valores representando um conjunto de possíveis categorias.

  • Sinônimos: enumeração, enumerado, fatores, nominal, politômico

Binários: Um caso especial de dados categóricos com apenas duas categorias de valores (0/1, verdadeiro/falso).

  • Sinônimos: Dicotômico, lógico, indicador, booleano

Ordinais: Dado categórico que tem uma ordem explícita.

  • Sinônimo: fator ordenado

Transformações¶

Uma transformação significa muda as escala dos dados por meio de um função.Dessa meaneira, quando um conjunto de dados é muito assimétrico é comum transformá-lo de modo a facilitar a modelagem.

Há diversas técnicas para aplicar transformações no dados no casos problema estudado, alguns transformações populares são: tranformação de log, raiz quadrada, exponencial e entres outras.

Aplicabilidade dos ganhos de uma transformação:

  • vizualiar os dados em uma outra estrutura
  • reduzir a assimetria para uma melhor modelagem
  • endireitar um relação linear em gráfico de dispersão
  • reduzir o acúmulo de variância no tempo

Termos-chave para Regressão Linear Simples¶

Resposta¶

  • A variável que estamos tentando prever.

  • Sinônimos: variável dependente, variável Y, alvo, resultado

Variável independente¶

  • A variável usada para prever a resposta.

  • Sinônimos: variável independente, variável X, característica, atributo

Vetor¶

  • O vetor dos valores preditor e de resultado para um indivíduo ou caso específico.

  • Sinônimos: linha, caso, exemplo

Intercepto¶

  • O interceptor da linha de regressão, ou seja, o valor previsto quando X = 0.

  • Sinônimos: a0, a1...

Coeficiente de Regressão¶

  • O declive da linha de regressão

  • Sinônimos: declive, a1, a1, estimativas de parâmetro, pesos

Valores ajustados¶

  • As estimativas Ŷi obtidas da linha de regressão.

  • Sinônimo: valores previstos

Resíduo¶

  • A diferença entre os valores observados e os valores ajustados.

  • Sinônimo: erros

Mínimos quadrados¶

  • O método de ajustar uma regressão pela minimização da soma dos quadrados dos resíduos.

  • Sinônimo: mínimos quadrados ordinários

Ideias-chave

  • A equação de regressão modela o relacionamento entre a variável responsiva Y e uma variável preditora X como uma linha.

  • Um modelo de regressão gera valores ajustados em resíduos, previsões da resposta e erros das previsões.

  • Os modelos de regressão costumam ser ajustados pelo método de mínimos quadrados.

  • A regressão é usada tanto para previsão quanto para explicação.


Significância Estatística e Valores P¶

Significância estatística é como os estatísticos medem se um experimento (ou até mesmo um estudo de dados existente) produz um resultado mais extremo do que o acaso poderia produzir. Se o resultado estiver além do domínio da variação do acaso, é chamado de estatisticamente significante.

Termos-chave¶

  • Valor p: Dado um modelo de acaso que representa a hipótese nula, o valor p é a probabilidade de obter resultados tão incomuns ou extremos quanto os resultados observados.

  • Alfa: Um limiar de probabilidade de “ser incomum” que os resultados do acaso podem ultrapassar, para resultados reais serem definidos como estatisticamente significantes.

  • Erro tipo 1: Concluir erroneamente que um efeito é real (quando acontece pelo acaso).

  • Erro tipo 2: Concluir erroneamente que um efeito ocorreu pelo acaso (quando é real).

P-Value¶

A simples observação do gráfico não é um meio muito preciso de medir a significância estatística, então o valor p é mais interessante. Esta é a frequência com a qual o modelo de acaso produz um resultado mais extremo que o resultado observado. Podemos estimar o valor p através de nosso teste de permutação tirando a proporção de vezes em que o teste de permutação produz uma diferença igual ou maior que a diferença observada:

Tem havido muita controvérsia em torno do uso do valor p nos últimos anos. Um periódico de psicologia chegou a “banir” o uso de valores p em artigos apresentados com a justificativa de que publicar decisões com base somente no valor p estava resultando na publicação de pesquisas fracas. Muitos pesquisadores, com uma ideia muito vaga do que o valor p realmente significa, mergulham nos dados e entre diferentes hipóteses possíveis para teste até encontrarem uma combinação que resulte em um valor p significativo e, portanto, um artigo adequado para publicação.O real problema é que as pessoas querem um significado além daquele que o valor p oferece. Aqui está o que queríamos que o valor p expressasse:

  • A probabilidade de que o resultado ocorre pelo acaso.

Esperamos um valor baixo, para que possamos concluir que provamos algo. Era assim que muitos editores de periódicos estavam interpretando o valor p. Mas aqui está o que o valor p expressa realmente:

  • A probabilidade de que, dado um modelo por acaso, podem ocorrer resultados tão extremos quanto os resultados observados.

A diferença é sutil, mas real. Um valor p significativo não leva você tão longe no caminho da “prova” quanto parece prometer. O fundamento lógico para a conclusão “estatisticamente significante” é um tanto mais fraco quando se entende o significado real do valor p.

Alfa¶

Os estatísticos não gostam da ideia de deixar a definição de um resultado como “muito incomum” para acontecer por acaso a critério dos pesquisadores. Em vez disso, especifica-se com antecedência um limiar, como em “mais extremo que 5% do resultado do acaso (hipótese nula)”. Esse limiar é conhecido como alfa. Os típicos níveis de alfa são 5% e 1%. Qualquer nível escolhido é uma escolha arbitrária — não há nada no processo que garante decisões corretas x% do tempo. Isso acontece porque a questão de probabilidade sendo respondida não é “qual é a probabilidade de isso ter acontecido por acaso?”, mas, sim, “dado um modelo de acaso, qual é a probabilidade de haver um resultado tão extremo?”. Nós então deduzimos retroativamente sobre a adequação do modelo de acaso, mas esse julgamento não traz uma probabilidade. Esse ponto tem sido assunto de muita confusão.

Erros Tipo 1 e Tipo 2¶

Na aferição da significância estatística, é possível haver dois erros:

  • Erro tipo 1, no qual se conclui erroneamente que um efeito é real, quando, na verdade, ocorre por acaso.
  • Erro tipo 2, no qual se conclui erroneamente que um efeito não é real (ou seja, ocorre por acaso), quando, na verdade, é real.

Na verdade, um erro tipo 2 não é bem um erro, mas, sim, uma conclusão de que o tamanho da amostra é muito pequeno para detectar o efeito. Quando um valor p fica além da significância estatística (por exemplo, excede 5%), o que estamos dizendo, na verdade, é “efeito não provado”. Pode ser que uma amostra maior resulte em um valor p menor. A função básica dos testes de significância (também chamados de testes de hipótese) é a proteção contra os enganos pelo acaso, então são comumente estruturados de modo a minimizar os erros Tipo 1

Ideias-chave¶

  • Os testes de significância são usados para determinar se um efeito observado está dentro da faixa de variação do acaso para um modelo de hipótese nula.

  • O valor p é a probabilidade de os resultados tão extremos quanto os resultados observados podem ocorrer, dado um modelo de hipótese nula.

  • O valor alfa é o limiar de “não ser comum” em um modelo de acaso de hipótese nula.

  • O teste de significância tem sido mais relevante para o registro formal de pesquisas do que para a ciência de dados (mas tem sumido recentemente, mesmo para o primeiro)


Métricas e avaliação de Regressão¶

R²

Segundo (ALEXANDRE.G, 2017) ressaltar que um bom modelo de regressão é aquele que ajuda a explicar em grande medida a variablidadede Y. O coeficiente de determinação (R²) é uma métrica de regressão simples e muito útil de qualidade do ajuste, onde estima a proporção da variabilidade da variável dependente que é explicada pela variável independente do modelo de regressão.

O R² assumirá valores entre 0 e 1, quando a variabilidade explicada pelo modelo for nula, e um, quando 100% da variabilidade total for explicada pelo modelo que representa o percentual da variância do alvo com o qual os atributos contribuem. Assim como, valores maiores são melhores, mas de modo geral, é difícil avaliar o modelo exclusivamente a partir dessa métrica. Bem como, um valor igual a 0.7 representa uma boa pontuação? depende. Da mesma forma, para um certo conjunto de dados, o valor igual 0.5 pode ser uma boa pontuação, enquanto, para outro, um valor igual a 0.9 poderia ser ruim. Geralmente usamos esse número junto com outras métricas ou visualizações para avaliar melhor o modelo. Em outras palavras, conforme ilustra a figura a seguir simplifica o conceito da equação do R².

image.png

Source: (ALEXANDRE.G, 2017)

Nesse mesmo sentido, conforme defende (ALEXANDRE.G, 2017) o coeficiente de correlação, o R² é uma medida de relação linear. Assim, embora as variáveis sem relação apresentem R² nulo ou próximo de 0, a recíproca não é necessariamente verdadeira, já que a relação entre Y e X pode ser não linear. Outra precaução em relação da análise do R² refere-se ao fato de valores baixos para esta estatística não necessariamente significarem um ajuste insatisfatório. Algumas variáveis, como, por exemplo, a riqueza de uma pessoa, são muito difíceis de serem determinadas quantitativamente. Mesmo uma baixa contribuição de um fator explanatório pode nos dar uma importante fonte de informação.


References¶

Automated Machine Learning in Action

Cálculo: Funções de uma e várias variáveis, 3E

Cruzeiro do Sul: As Distribuições Normais

Econometria conceitos e aplicações

Hands-on: Machine Learning with Scikit-Learn & TensorFlow, 2E

Inteligência Artificial - Mitos e verdades: As reais oportunidades de criação de valor nos negócios e os impactos no futuro do trabalho

Machine Learning with Python Cookbook: Practical Solutions from Preprocessing to Deep Learning

Organizações exponenciais: Por que elas são 10 vezes melhores, mais rápidas e mais baratas que a sua (e o que fazer a respeito)

Practical Statistics for Data Scientists: 50+ Essential Concepts Using R and Python, 1E

SQL para Análise de Dados: Técnicas avançadas para transformar dados em insights

Starting Out with Python, 4E

UNIP: Tópicos de Matemática Aplicada, 2022

A Quick Way to Check the Linearity of Data

Assimetria e curtose

Chi-squared

Chi-Square Test

Chi-Squared Tests

Chi-Square Test, with Python

Coeficiente de variação

Correlation vs Collinearity vs Multicollinearity

Data Science Academy

Fitting ‘Time-to-Event’ Data to a Gamma Distribution Model Using Python

Machine Learning

Medidas de assimetria e curtose

Medidas de dispersao - assimetria e curtose

Methods for Normality Test with Application in Python

Skewness

Skewness and Kurtosis: Quick Guide (Updated 2023)

Shapiro-Wilk Test Calculator

Standard Deviation Formulas

Statistics in Python: Chi-Squared Tests

Statistics in Python — Using Chi-Square for Feature Selection

The Difference Between Standard Deviation and Standard Error

Understanding The Chi-Squared Test

Z-Score